Неразрешенный внешний символ для переменных в пространстве имен

У меня проблема с 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)

Когда я комментирую пространство имен, все работает как надо. Это первый раз, когда я хочу использовать пространства имен, и я понятия не имею, что с этим делать.

2

Решение

Ваш #include директивы (и, следовательно, ваши определения интерфейса) находятся внутри namespace Engine, но, похоже, ваши реализации не являются. Это дает вам ошибку ссылки.

Вам нужно обернуть тело кода в каждый из этих файлов .cpp в namespace Engine также.

то есть:

 #include "engine.h"namespace Engine
{
// implementation goes here
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]