在C++ socket中为啥这条语句不通过 5C

#include
#include"winsock2.h"
#pragma comment(lib,"ws2_32.lib")
#include
using namespace std;
int main(int argc, char* argv[] )
{
const int BUF_SIZE = 64;
WSADATA wsd;
SOCKET sServer;
SOCKET sClient;
//SOCKADDR_IN serverAddr;

struct socketaddr_in serverAddr;

}
最后一句报错,但是换成上一句注释掉的,就没有问题
请大神解答

6个回答

struct socketaddr_in serverAddr;
这是c语言的写法,而不是c++的写法。

如果非要那么写,需要用typedef将struct socketaddr_in再定义socketaddr_in成

struct socketaddr_in serverAddr; 不是变量声明,而是结构体定义,而且是不完整的定义。

SOCKADDR_IN serverAddr;
是在winsock中封装的,不知道它的底层是不是调用的struct sockaddr_in.这应该就是为什么你会出错的原因吧

typedef struct sockaddr_in {
·......
} SOCKADDR_IN, *PSOCKADDR_IN;

最后一句改成 struct sockaddr_in serverAddr;
在vs2015上测试,编译通过。

struct 是定义结构体

在winsock2.h中有如下定义
typedef struct sockaddr_in SOCKADDR_IN;
所以你注释掉那行是正确的。系统写的肯定没错。系统这么做是为了兼容C和C++。
你自己那行,把struct去掉也是对的。因为C++里面struct已经和class 等价了,声明变量的时候不需要struct关键字。
socketaddr_in serverAddr

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!