在我正在研究的程序中,我已经在main中声明了一个向量。我有两个使用向量的函数:一个int函数和一个标准的void'print'函数。我试图在void函数中使用函数指针(指向int函数),但是我得到了向量尚未声明的错误,即使它在main中。我已经尝试在main之外声明向量,并且函数工作正常,但是我对将它保持在main之外犹豫不决。我想知道在main中声明它时是否有一些方法可以在void函数中使用向量。这是我要问的一些示例代码:
// 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;
}
答案 0 :(得分:1)
在你的函数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 (*workerFuncPtr)(vector<int>&));
int (*squarePtr)(vector<int>&);
答案 1 :(得分:0)
void print (int (*squarePtr)(vector<int>&))
此参数仅接受指向square函数的指针,即它。它不包含指针或对v
变量的引用。你的打印函数不知道v
是什么,除非你将v
作为参数传递,或者使v
成为一个全局变量(这就是你将它移出main的原因)。 / p>
这样做:
// 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)
{
...
}