名称空间中变量的未解析外部符号

时间:2013-07-06 17:19:54

标签: c++ namespaces extern unresolved-external lnk2001

我遇到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)

当我评论命名空间时,一切都按预期工作。这是我第一次使用名称空间,我不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

您的#include指令(以及您的接口定义)位于namespace Engine内,但您的实现似乎不是。这会给你链接错误。

您还需要在namespace Engine中的每个.cpp文件中包装代码体。

即:

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