未解析的外部符号(单例类 C++)

Unresolved external symbol (singleton class C++)

本文关键字:单例类 C++ 符号 外部      更新时间:2023-10-16

我已经在Stackoverflow中查找了一些此类问题的答案,但没有一个对我有帮助。这个问题描述了如何解决此错误,我应该提供一个定义,而不仅仅是一个声明。我已经这样做了,但我仍然收到以下错误:

错误

13 错误 LNK2019:未解析的外部符号"专用:__thiscall网络管理器::网络管理器(无效)"(??0NetworkManager@@AAE@XZ) 在函数"public: static class NetworkManager * __cdecl NetworkManager::Instance(void)" (?Instance@NetworkManager@@SAPAV1@XZ) C:\Users\HIDDEN\Documents\AGK Projects\C++ Libraries\apps\template_windows_vs2013\NetworkManager.obj Template

代码如下:

网络管理器.h

#ifndef _H_NETWORKMANAGER_
#define _H_NETWORKMANAGER_
#include<iostream>
#include<vector>
class NetworkManager
{
private:
    NetworkManager();
    static NetworkManager * netManager;
public:
    int networkID;
    static NetworkManager * Instance();
    int HostNetwork(std::string netName, std::string hostName, int port);
    int JoinNetwork(std::string netName, std::string clientName);
    bool IsNetworkActive(int netID);
};
#endif

网络管理器.cpp

#include<iostream>
#include "NetworkManager.h"
#include "template.h"
NetworkManager * NetworkManager::netManager = NULL;
NetworkManager * NetworkManager::Instance()
{
    if (!netManager)
        netManager = new NetworkManager;
    return netManager;
}
int NetworkManager::HostNetwork(std::string netName, std::string hostName, int port)
{
    int networdID__;
    const char * netName__ = netName.c_str();
    const char * hostName__ = hostName.c_str();
    networdID__ = agk::HostNetwork(netName__, hostName__, port);
    return networdID__;
}
int NetworkManager::JoinNetwork(std::string netName, std::string clientName)
{
    int networdID__;
    const char * netName__ = netName.c_str();
    const char * clientName__ = clientName.c_str();
    networdID__ = agk::JoinNetwork(netName__, clientName__);
    return networdID__;
}
bool NetworkManager::IsNetworkActive(int netID)
{
    switch (agk::IsNetworkActive(netID))
    {
    case 0: return false; break;
    case 1: return true;  break;
    }
}

您在头文件中声明了NetworkManager::NetworkManager(),但在源文件中没有它的实现。