я получаю необъявленную ошибку идентификатора (C2065 на vs2013) на моем проекте, мне удалось воспроизвести проблему в примере коде ниже:Как решить этот необъявленный идентификатор
foo.h:
#pragma once
#include "bar.h"
class Foo
{
public:
inline void doStuff() { someFunction(); }
};
bar.h:
#pragma once
#include <map>
#include "foo.h"
extern std::map<const char*, Foo> myMap;
void someFunction();
bar.cpp:
#include "bar.h"
std::map<const char*, Foo> myMap;
void someFunction()
{
}
main.cpp:
#include "foo.h"
int main()
{
Foo foo;
foo.doStuff();
return 0;
}
При создании на Visual Studio Express 2013, это дает следующие ошибки:
ошибка C2065: 'Foo': необъявленный идентификатор
ошибка C2923: «STD :: Карта»: 'Foo' не является допустимым типом аргумента шаблона для параметра '' _Ty
ошибка C3861: 'SomeFunction': идентификатор не найден
В чем проблема и как ее можно решить?
И передать ссылку классу в тот, который вы удаляете из include. – Robinson
Благодарим за совет, решив проблему, переместив #include из заголовка в файл cpp. –