У меня проблема с LNK2001: нерешенная внешняя ошибка символа. Он отображается только тогда, когда у меня есть все мои классы в моем пространстве имен и ссылается на глобальные переменные, которые я использую несколько файлов. Вот пример кода, как выглядят мои коды:
Engine.h
#pragma once
namespace Engine{
#include "Core.h"#include "Display.h"#include "Box.h"// ... some code...
}
using namespace Engine;
Core.cpp
#include "Engine.h"// ...some code...
Core.h
extern Matrix matrix;
// ... some code...
Display.cpp
#include "Engine.h"Matrix matrix;
// ... some code...
Display.h
// ... some code...
Box.cpp
void Box::draw(PxShape *shape){
// matrix=.. some code...
}
Box.h
// ... some code...
Сообщение об ошибке
1> Box.obj: ошибка LNK2001: неразрешенный внешний символ «struct Engine :: Matrix Engine :: matrix» (? Matrix @ Engine @@ 3UMatrix @ 1 @ A)
Когда я комментирую пространство имен, все работает как надо. Это первый раз, когда я хочу использовать пространства имен, и я понятия не имею, что с этим делать.
Ваш #include
директивы (и, следовательно, ваши определения интерфейса) находятся внутри namespace Engine
, но, похоже, ваши реализации не являются. Это дает вам ошибку ссылки.
Вам нужно обернуть тело кода в каждый из этих файлов .cpp в namespace Engine
также.
то есть:
#include "engine.h"namespace Engine
{
// implementation goes here
}
Других решений пока нет …