实现“Singleton”模式时出错

时间:2015-11-14 13:51:47

标签: c++

在尝试在c ++中实现单例模式时,我遇到了以下问题:

  • 外部符号未解析__imp_WSAStartup在函数“private:__ cdecl MaWinsock :: MaWinsock(void)”中引用(?? 0MaWinsock @@ AEAA @ XZ))
  • 外部符号未解析__imp_WSACleanup在函数“public:__cdecl MaWinsock :: ~MaWinsock(void)”中引用(?? 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;
    }

非常奇怪的是,在另一个相关项目中,这段代码运行良好,但在这里,我无法弄清楚问题出在哪里。

如果你们其中一个人熟悉这种模式,任何帮助都会受到赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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