实现"Singleton"模式时出错

Error while implementing the "Singleton" pattern

本文关键字:出错 Singleton 实现 模式      更新时间:2023-10-16

我在c++中尝试实现Singleton模式时遇到了以下问题

  • 未解析函数"private:__cdecl MaWinsock::MaWinsock(void)"中引用的外部符号__imp_WSAStartup(?0MaWinsock@@AEAA@XZ))
  • 未解析函数"public:__cdecl MaWinsock::~MaWinsock(void)"中引用的外部符号__imp_WSACleanup(?1MaWinsock@@QEAA@XZ)

这是MaWinsock.h

    #include <WinSock2.h>
    class MaWinsock
    {
        WSADATA wsaData;    //  structure contenant les données de la librairie winsock à initialiser. représente la DLL.
        MaWinsock(void);
        static MaWinsock *instanceUnique;
    public:
        static MaWinsock *getInstance();
        ~MaWinsock(void);
    };

这是MaWinsock.cpp

    #include <iostream>
    #include "Exception.h"
    #include "MaWinsock.h"

    using namespace std;
    /* static */   MaWinsock* MaWinsock::instanceUnique = NULL;
    /* static */ MaWinsock* MaWinsock::getInstance()
    {
        if (!instanceUnique) instanceUnique = new MaWinsock;
        return instanceUnique;
    }

    MaWinsock::MaWinsock(void)
    {
        int r;
        r = WSAStartup(MAKEWORD(2, 0), &wsaData);       // MAKEWORD(2,0) sert à indiquer la version de la librairie à utiliser : 1 pour winsock et 2 pour winsock2
                                                        /* en cas de succès, wsaData a été initialisée et l'appel a renvoyé la valeur 0 */
        if (r) throw Exception("L'initialisation a échoué");
        cout << "initialisation winsock effectuée" << endl;
    }

    MaWinsock::~MaWinsock(void)
    {
        WSACleanup();
        cout << "libération des ressources de la winsock effectuée" << endl;
    }

非常奇怪的是,在另一个相关项目中,这段代码运行良好,但在这里,我不知道问题出在哪里

如果你们中有人熟悉这种模式,将不胜感激

感谢

为了使其工作,您应该在您的cpp文件中添加以下行:

#pragma comment(lib, "wsock32.lib")