【问题标题】:Function pointer "was not declared in this scope"函数指针“未在此范围内声明”
【发布时间】:2015-11-23 06:35:11
【问题描述】:

在 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。这是怎么回事? (如果有帮助,我可以发布我的整个 main 函数,但它相当长。)

【问题讨论】:

  • 您在块内声明了get_V。当该块结束时,其中的所有本地人都会超出范围。
  • @JamesRoot 啊,我习惯了 python,其中 if 语句没有定义单独的范围。谢谢。

标签: c++ function pointers scope functor


【解决方案1】:

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

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

【讨论】:

  • 如果eulerexact 最终采取不同的论点,我最好的选择是什么?有没有办法让条件块内的声明就在它外面?
  • @dbliss 那么您可能应该开始重新考虑您的设计。或者做一个简单的方法,只需调用 if 语句中的函数。
  • 调用这些 if 语句中的函数将不起作用。我想我可以在函数调用时(在循环内)放置新的 if 语句。这个设计对我来说似乎没有任何不合理之处。我有不同的数值方法可以在脚本中使用。我想指定在命令行中使用哪种方法。每个方法都与一个函数相关联。
  • 但我想既然 C++ 如此之快,在循环中包含 if 语句不会真的伤害到我。
  • @dbliss 这可能是因为字符串比较。您可以将比较放在主循环之外,只需设置一些整数标志,然后只在循环内检查该标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多