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)
{
...
}