Указатель функции "не был объявлен в этой области"

На вершине main Функция в сценарии C++, я определяю указатель функции на основе аргумента командной строки следующим образом:

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 ответ

Решение

Вы объявляете две разные переменные, каждая из которых называется get_Vоба локально в рамках if заявления. Как только код внутри if утверждение сделано, этих переменных больше нет, они вышли из области видимости.

Простое решение? Объявите переменную вне if заявления, и делать только задания в if ведомости тел.

Другие вопросы по тегам