C ++通过函数指针

时间:2016-03-02 04:35:31

标签: c++ pointers vector function-pointers

在我正在研究的程序中,我已经在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;
}

2 个答案:

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