C++通过函数指针调用函数中的矢量

问题描述:

在我正在开发的程序中,我已经声明了main中的一个矢量。我有两个使用向量的函数:一个int函数和一个标准的void“print”函数。我试图在void函数中使用一个函数指针(指向int函数),但我得到的错误是该向量尚未声明,即使它在main中。我试过在main之外声明vector,并且该函数运行良好,但是我仍然犹豫是否将它保留在main之外。我想知道在main函数中声明时是否有某种方法在void函数中使用vector。下面是一些示例代码要问我:C++通过函数指针调用函数中的矢量

// Example program 
#include <iostream> 
#include <vector> 
using namespace std; 

int returnSquare(vector<int>& numbers); 
void print(int (*squarePtr)(vector<int>&)); 
int (*squarePtr)(vector<int>&); 

int main() 
{ 
    vector<int> v(1); 
    squarePtr = &returnSquare; 

    for(int i = 0; i < v.size(); i++) 
    { 
     v.at(i) = i * 25; 
     cout << v.at(i) << " "; 
    } 

    print(squarePtr); 

    return 0; 
} 

int returnSquare(vector<int>& numbers) 
{ 
    int product = 0; 
    for(int i = 0; i < numbers.size(); i++) 
    { 
     product = numbers.at(i) * numbers.at(i); 
    } 
    return product; 
} 

void print(int (*squarePtr)(vector<int>&)) 
{ 
    int answer = (*squarePtr)(v); 
    cout << answer << endl; 
} 

在你的函数print你只有一个参数。打电话给你的平方函数,你需要传递给方给它的载体,是这样的:

void print(int (*squarePtr)(vector<int>&), vector<int> &v) 
{ 
    int answer = (*squarePtr)(v); 
    cout << answer << endl; 
} 

没有这个变量v不是在函数内部可见。该呼叫应该看起来像:

print(squarePtr, v); 

不太重要。您在全局定义中使用两次squarePtr名称。这不会给你的代码带来清晰。你最好写:

​​

void print (int (*squarePtr)(vector<int>&)) 

此参数只接受一个指向您的二次函数,仅此而已。它不包含指针或对v变量的引用。您的打印功能不知道v是什么,除非您将v作为参数或使v成为全局变量(这是您将它移出主体的那个)。

这样做:

// Modify your print definition to accept a reference to your vector `v` 
void print(int (*squarePtr)(vector<int>&), vector<int>& v); 

// Add `v` as the second argument to your print call 
print(squarePtr, v); 

// Modify the definition of your print function to accept a reference to your vector `v` 
void print(int (*squarePtr)(vector<int>&), vector<int>& v) 
{ 
    ... 
}