Почему C++ не видит функцию, находящуюся под другой?
Есть следующий код:
#include <iostream>
#include <vector>
#include <string>
class Class1 {/***/};
class Class2 {/***/};
static int bar(){ /*code*/ if (smth) foo() /*code*/}
static int foo(){int a = bar() /**code**/}
int main(){
std::cout << foo();
}
Рекурсия не бесконечная, переписываю свой алгоритм с Java, там всё работало.
При попытке компиляции выдаёт следующую ошибку: C3861 foo: идентификатор не найден
В чём может быть проблема и как её можно исправить?
Парсер компилирует текст сверху вниз. Он ничего не знает ещё про функцию, объявленную ниже. Поэтому ему нужно сообщить, что foo - это функция. int foo();
Подобные декларации функций называются forward-определениями.