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

Unresolved external symbol for variables in namespace

提问人:Harry 提问时间:7/7/2013 最后编辑:OswaldHarry 更新时间:7/7/2013 访问量:5863

问:

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

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

C++ 命名空间 extern unresolved-external lnk2001

评论

0赞 Oswald 7/7/2013
如果在定义此命名空间的同一头文件中,将命名空间的所有元素引入全局命名空间,则绝对没有理由定义命名空间。EngineEngine
0赞 Harry 7/7/2013
在定义命名空间之前,我还包含了一些第三方库和标准 c++ 标头,我想表明这些类是由我提供的。

答:

4赞 Joe Z 7/7/2013 #1

您的指令(以及您的接口定义)在里面,但您的实现似乎不在里面。这给了你链接错误。#includenamespace Engine

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

结婚

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

评论

0赞 Harry 7/7/2013
谢谢,我认为.cpp文件会自动包含在标头命名空间中。
0赞 Richa Aggarwal 2/14/2017
谢谢!它解决了我的问题。节省了我很多时间。