我遇到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)
当我评论命名空间时,一切都按预期工作。这是我第一次使用名称空间,我不知道该怎么做。
答案 0 :(得分:4)
您的#include
指令(以及您的接口定义)位于namespace Engine
内,但您的实现似乎不是。这会给你链接错误。
您还需要在namespace Engine
中的每个.cpp文件中包装代码体。
即:
#include "engine.h"
namespace Engine
{
// implementation goes here
}