函数指针"was not declared in this scope"
Function pointer "was not declared in this scope"
在 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
。这是怎么回事? (如果有帮助的话,我可以 post 我的整个主要功能,但它相当长。)
您声明了两个不同的变量,每个变量都命名为 get_V
,它们都位于 if
语句的局部范围内。一旦 if
语句中的代码完成,那些变量就不再存在,它们已经超出范围。
简单的解决方案?在if
语句外声明变量,只在if
语句体中赋值。
在 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
。这是怎么回事? (如果有帮助的话,我可以 post 我的整个主要功能,但它相当长。)
您声明了两个不同的变量,每个变量都命名为 get_V
,它们都位于 if
语句的局部范围内。一旦 if
语句中的代码完成,那些变量就不再存在,它们已经超出范围。
简单的解决方案?在if
语句外声明变量,只在if
语句体中赋值。