指针已在文件中定义



我有这段代码,当它全部在一个文件中时,它像预期的那样工作问题是我需要平台有一个静态指针的引擎,反之亦然

#include <iostream>
#pragma region include/iplatform.h
namespace engine {
class IEngine;
}
namespace platform {
class IPlatform {
public:
virtual ~IPlatform() = default;
static engine::IEngine* ptrEngine;
};
static std::unique_ptr<IPlatform> platform;
engine::IEngine* platform::IPlatform::ptrEngine = nullptr;
}
#pragma endregion
#pragma region include/iengine.h
namespace engine {
class IEngine {
};
}
#pragma endregion
#pragma region include/engine.h
namespace engine {
class Engine : public IEngine {
public:
Engine();
void setup();
};
}
#pragma endregion
#pragma region src/enginge.cpp
namespace engine {
Engine::Engine() { setup(); }
}
#pragma endregion
#pragma region include/platform.h
namespace platform {
class Platform : public platform::IPlatform{
public:
virtual ~Platform() override;
};
}
#pragma endregion
#pragma region src/platform.cpp
namespace platform {
Platform::~Platform() {
}
}
#pragma endregion
#pragma region src/engine.cpp
namespace engine {
void Engine::setup() {
platform::platform = std::make_unique<platform::Platform>();
platform::platform->ptrEngine = this;
}
}
#pragma endregion
int main() {
engine::Engine* e = new engine::Engine();
std::cout << "" << e << std::endl;
std::cout << "" << platform::platform->ptrEngine;
return 0;
}

但是一旦我把它分成文件,根据区域块的概述,我开始得到错误,项目结构要求我们有头和源分开

Severity    Code    Description Project File    Line    Suppression State
Warning C6031   Return value ignored: 'std::unique_ptr<platform::IPlatform,std::default_delete<platform::IPlatform> >::->'. CPP_BOILERPLATE C:UsersTiitDocumentscppcpp-project-mastersappmain.cpp    74  
Warning C6031   Return value ignored: 'std::unique_ptr<platform::IPlatform,std::default_delete<platform::IPlatform> >::->'. CPP_BOILERPLATE C:UsersTiitDocumentscppcpp-project-mastersappmain.cpp    83  
Warning D9025   overriding '/W3' with '/W4' C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugcpp-project-masters C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugcl  1   
Warning D9025   overriding '/W3' with '/W4' C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugcpp-project-masters C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugcl  1   
Error   LNK2005 "public: static class engine::IEngine * platform::IPlatform::ptrEngine" (?ptrEngine@IPlatform@platform@@2PEAVIEngine@engine@@EA) already defined in engine.cpp.obj  C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugcpp-project-masters C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugplatform.cpp.obj    1   
Error   LNK1169 one or more multiply defined symbols found  C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugcpp-project-masters C:UsersTiitDocumentscppcpp-project-mastersoutbuildx64-Debugmain.exe    1   

是否有办法做到这一点

@wohlstad评论的解决方案是移动

engine::IEngine* platform::IPlatform::ptrEngine = nullptr;

到其中一个源文件

最新更新