构建程序时出现链接器错误。问题似乎是我的NetworkManager单例被带入友情声明的Networkable。我读到在.hpp文件中使用实例声明时可能会发生这种情况,但如果实例()函数没有以某种方式内联,那么这不应该是我的情况。
我在这里发现了类似的问题,但没有人能回答我的问题。有什么建议吗?
// Networkable.hpp
#pragma once
class Networkable
{
friend class NetworkManager;
public:
....
//NetworkManager.hpp
#pragma once
class Networkable;
class NetworkManager
{
public:
static NetworkManager &instance();
~NetworkManager();
void registerNetworkable(Networkable *networkable);
void unregisterNetworkable(Networkable *networkable);
void update();
...
// errors:
1>NetworkManager.obj : error LNK2005: "public: __thiscall NetworkManager::~NetworkManager(void)" (??1NetworkManager@@QAE@XZ) already defined in Networkable.obj
1>NetworkManager.obj : error LNK2005: "public: static class NetworkManager & __cdecl NetworkManager::instance(void)" (?instance@NetworkManager@@SAAAV1@XZ) already defined in Networkable.obj
1>NetworkManager.obj : error LNK2005: "public: void __thiscall NetworkManager::registerNetworkable(class Networkable *)" (?registerNetworkable@NetworkManager@@QAEXPAVNetworkable@@@Z) already defined in Networkable.obj
1>NetworkManager.obj : error LNK2005: "public: void __thiscall NetworkManager::unregisterNetworkable(class Networkable *)" (?unregisterNetworkable@NetworkManager@@QAEXPAVNetworkable@@@Z) already defined in Networkable.obj
1>NetworkManager.obj : error LNK2005: "public: void __thiscall NetworkManager::update(void)" (?update@NetworkManager@@QAEXXZ) already defined in Networkable.obj
答案 0 :(得分:0)
是的,我很惭愧地说我找到了答案。我在Networkable.cpp中包含了NetworkManager.cpp而不是.hpp。 猜猜这是在深夜编码时会发生什么......
但它确实有点提高了一个有效且容易犯错误 - 写.cpp而不是.hpp而不是"看到"问题。用.h来发现拼写错误要容易得多,让我质疑.hpp文件的命名标准...