gpt4 book ai didi

c++ - 编译器错误 C2275

转载 作者:太空狗 更新时间:2023-10-29 23:53:42 24 4
gpt4 key购买 nike

我一直在 Visual Studio 2010 中编写一个简单的 WinSock 应用程序。我将我的应用程序入口点命名为“main.c”,然后我在声明 SOCKET 对象时遇到了这个错误:

error C2275: 'SOCKET' : illegal use of this type as an expression

奇怪的是,我通过将代码文件从 ma​​in.c 重命名为 ma​​in.cpp

解决了这个问题

出于好奇,我想知道这个错误是什么意思,以及通过更改扩展名发生了什么差异。

提前致谢。

编辑

相关代码如下:

#pragma comment(lib,"ws2_32")

#include <WinSock2.h>
#include <stdio.h>


int main()
{
// Startup the winsock
WORD wVersionRequested;
WSADATA wsaData;
int wsaerr;
wVersionRequested = MAKEWORD(2,2);
wsaerr = WSAStartup(wVersionRequested,&wsaData);
if(wsaerr != 0)
{
printf("Winsock2 dll is not found!\n");
WSACleanup();
return 0;
}
else
{
printf("Winsock2 dll is found!\n");
printf("Current System Status: %s.\n",wsaData.szSystemStatus);
}

//Create a SOCKET object called socketobj.
SOCKET socketobj;
socketobj = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (socketobj == INVALID_SOCKET)
{
printf("Socket Intialization Failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 0;
}
else

{
printf("Socket Intialization Success\n");
}

Sleep(10000);
return 0;
}

最佳答案

没有看到代码很难说。

但我的猜测是您有一些交错的声明和代码。 MSVC的C编译器只有C89不支持。这可以解释为什么 C++ 编译器接受它,但 C 编译器不接受它。

在 C99 之前,所有声明都必须位于函数或 block 的开头。

编辑:您的代码没有显示整个函数,但您可能在 SOCKET socketobj; 声明之前有一些(非声明)代码。


现在显示了完整的函数,它确认您正在交错声明和代码:

WORD wVersionRequested;            //  Declaration: ok
WSADATA wsaData; // Declaration: ok
int wsaerr; // Declaration: ok
wVersionRequested = MAKEWORD(2,2); // Code: ok

...

SOCKET socketobj; // Declaration: NOT ok
socketobj = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

这里的解决方案是将 SOCKET socketobj; 移动到带有其他声明的函数的开头。

关于c++ - 编译器错误 C2275,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com