在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
。发生了什么事? (我可以发布我的整个主要功能,如果它有用,但它相当长。)
答案 0 :(得分:1)
您声明了两个不同的变量,每个变量都名为get_V
,这两个变量都位于if
语句范围内。一旦if
语句中的代码完成,那些变量就不再存在,它们已超出范围。
简单的解决方案?将变量声明在外的if
语句中,并且只在if
语句体中进行赋值。