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

Unresolved external symbol for variables in namespace

本文关键字:外部 符号 变量 命名空间      更新时间:2023-10-16

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...

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)

当我对命名空间进行注释时,一切都正常工作。这是我第一次想要使用名称空间,但我不知道该怎么办。

您的#include指令(以及接口定义)在namespace Engine内部,但您的实现似乎不是。这会导致链接错误。

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

即:

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