在 class 声明之外定义函数体未编译

Defining function body outside class declaration is not compiling

我试图定义在 class 中声明的函数(在头文件 .h 中)。但是这个分离的定义仍然存在编译问题。无论它是在带有声明的同一文件中还是在单独的 .cpp 中,它仍然 return 这些相同的错误

||=== Build: Debug in Server (compiler: GNU GCC Compiler) ===|

obj\Debug\SocketManager.o||In function

`ZN13SocketManager12setUpWINSOCKEv':|

J:\CodeBlocksProjects\Server\SocketManager.h|18|undefined reference to

`WSAStartup@8'| ||error: ld returned 1 exit status| ||=== Build

failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

#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;
}

只需稍作改动即可正常编译,但我想让它在不同的 .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 它无助于解决此类错误。也为我的英语感到抱歉,我不习惯以书面形式使用它。我以前从未在任何其他论坛上问过任何问题。这就是为什么我要求耐心 :)

感谢所有帮助和链接。

WSAStartup@8 是 C++ 损坏的名称。但是 winsock 库导出了一个 C 函数 WSAStartup。您之前(或相反)在某个地方定义了 WSAStartup 的原型,包括 "winsock.h" 或 "winsock2.h" 头文件。

删除错误的原型将解决这个 linker 问题。

进一步确保您 link 和 ws2_32.lib