2

我对 LNK2001 有疑问:未解决的外部符号错误。它仅在我的命名空间中有所有类并引用我使用多个文件的全局变量时才显示。这是我的代码的示例代码:

引擎.h

#pragma once
namespace Engine{
    #include "Core.h"
    #include "Display.h"
    #include "Box.h"
    // ... some code...
}
using namespace Engine;

核心.cpp

#include "Engine.h"
// ...some code...

核心.h

extern Matrix matrix;

// ... some code...

显示.cpp

#include "Engine.h"
Matrix matrix;

// ... some code...

显示.h

// ... some code...

盒子.cpp

void Box::draw(PxShape *shape){
    // matrix=.. some code...
}

盒子.h

// ... some code...

错误信息

1>Box.obj : 错误 LNK2001: 无法解析的外部符号“struct Engine::Matrix Engine::matrix” (?matrix@Engine@@3UMatrix@1@A)

当我评论命名空间时,一切正常。这是我第一次想使用命名空间,但我不知道该怎么做。

4

1 回答 1

4

您的#include指令(以及您的接口定义)在 inside namespace Engine,但您的实现似乎不在。那是给你链接错误。

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

IE:

 #include "engine.h"
 namespace Engine
 {
     // implementation goes here
 }
于 2013-07-06T17:24:01.427 回答