我试图定义在类中声明的函数(在头文件.h文件中)。但是这个分离的定义仍然存在编译问题。无论它是在带有声明的相同文件中还是在单独的.cpp中,它仍然会返回这些相同的错误
|| === Build:在Server中调试(编译器:GNU GCC编译器)=== |
obj \ Debug \ SocketManager.o ||函数
`ZN13SocketManager12setUpWINSOCKEv':|
J:\ CodeBlocksProjects \ Server \ SocketManager.h | 18 |未定义引用
`调用WSAStartup @ 8' | ||错误:ld返回1退出状态| || === Build
失败:2个错误,0个警告(0分钟,0秒(秒))=== |
#include <iostream>
#include <winsock2.h>
using namespace std;
class SocketManager
{
private:
WSADATA wsaData;
public:
void setUpWINSOCK();
SocketManager(int = 27015, string = "127.0.0.1");
};
void SocketManager::setUpWINSOCK()
{
int result = WSAStartup( MAKEWORD( 2, 2 ), & wsaData );
if( result != NO_ERROR )
cout<<"Initialization error.\n"<<endl;
}
稍微改变它的compilling,但我想在diffrent .cpp文件中使用分离的定义
#include <iostream>
#include <winsock2.h>
using namespace std;
class SocketManager
{
private:
WSADATA wsaData;
public:
void setUpWINSOCK()
{
int result = WSAStartup( MAKEWORD( 2, 2 ), & wsaData );
if( result != NO_ERROR )
cout<<"Initialization error.\n"<<endl;
}
SocketManager(int = 27015, string = "127.0.0.1");
};
我知道我可能搞乱了一些非常基本的东西,但我不知道如何搜索这个。我是Cpp的新手,即使我认识Java 它没有帮助解决这类错误。也很抱歉我的英语,我不习惯以书面形式使用它。我以前从未在任何其他论坛上提出过任何问题。这就是为什么我要求耐心:)
感谢所有帮助和链接。
答案 0 :(得分:0)
WSAStartup@8
是一个C ++错位名称。但是winsock库导出了一个C函数WSAStartup。你之前(或者说)包含了“winsock.h”或“winsock2.h”头文件的某个地方定义了WSAStartup的原型。
删除错误的原型将解决此链接器问题。
进一步确保您与ws2_32.lib
链接。