函数指针"未在此范围内声明"

时间:2015-11-23 06:35:12

标签: c++ function pointers scope functor

在C ++脚本中main函数的顶部,我根据命令行参数定义了一个函数指针,如下所示:

int main(int argc, char *argv[])
{

  // Set integration method.
  const char* method = argv[argc - 1];
  if (strcmp(method, "euler") == 0)
    {
      std::vector<double> (*get_V)(const std::vector<double> &, const double,
                                   const std::vector<double> &);
      get_V = euler;
    }
  else if (strcmp(method, "exact") == 0)
    {
      std::vector<double> (*get_V)(const std::vector<double> &, const double,
                                   const std::vector<double> &);
      get_V = exact;
    }
  else
    {
      throw std::invalid_argument("Invalid method supplied at command line.");
    }

我的目标是将变量get_V设置为指向函数euler或函数exact的指针,具体取决于命令行参数。

稍后,仍然在main函数内,我按如下方式调用get_V

V = get_V(V, Delta_t, dV_dt);

当我尝试编译时,这一行 - 我称之为get_V - 引发了以下错误:

(master)dbliss@nx3[dopa_net]> g++ -O3 hansel.cpp -o hansel.o
hansel.cpp: In function ‘int main(int, char**)’:
hansel.cpp:65: error: ‘get_V’ was not declared in this scope

这对我没有意义。我在此范围内声明了get_V。发生了什么事? (我可以发布我的整个主要功能,如果它有用,但它相当长。)

1 个答案:

答案 0 :(得分:1)

您声明了两个不同的变量,每个变量都名为get_V,这两个变量都位于if语句范围内。一旦if语句中的代码完成,那些变量就不再存在,它们已超出范围。

简单的解决方案?将变量声明在外的if语句中,并且只在if语句体中进行赋值。