在尝试在c ++中实现单例模式时,我遇到了以下问题:
这是 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;
}
非常奇怪的是,在另一个相关项目中,这段代码运行良好,但在这里,我无法弄清楚问题出在哪里。
如果你们其中一个人熟悉这种模式,任何帮助都会受到赞赏。
谢谢
答案 0 :(得分:0)
为了使其正常工作,您应该在cpp文件中添加以下行:
#pragma comment(lib, "wsock32.lib")