@snitron
Учуcь программировать на Android, IOS и Unity.

Почему 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: идентификатор не найден

В чём может быть проблема и как её можно исправить?
  • Вопрос задан
  • 2528 просмотров
Решения вопроса 3
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Просто добавьте int foo(); выше bar, а реализацию оставьте как есть.
Слово static тут не нужно, можете удалить.
Ответ написан
Комментировать
Вынести определение функций в заголовочный файл (*.h)
Ответ написан
Комментировать
@vanyamba-electronics
Парсер компилирует текст сверху вниз. Он ничего не знает ещё про функцию, объявленную ниже. Поэтому ему нужно сообщить, что foo - это функция.
int foo();
Подобные декларации функций называются forward-определениями.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы