编译器错误C2275
Compiler error C2275
我一直在Visual Studio 2010中编程一个简单的WinSock应用程序。我已经将我的应用程序入口点命名为"main.c",然后在声明SOCKET对象时遇到了这个错误:
error C2275: 'SOCKET' : illegal use of this type as an expression
奇怪的是,我通过将代码文件从main.c重命名为main.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: %ldn", WSAGetLastError());
WSACleanup();
return 0;
}
else
{
printf("Socket Intialization Successn");
}
Sleep(10000);
return 0;
}
如果看不到代码,很难判断。
但我的猜测是,您有一些交错的声明和代码。MSVC的C编译器只有C89不支持它。这可以解释为什么C++编译器接受它,而C编译器不接受。
在C99之前,所有声明都必须位于函数或块的开头。
EDIT:您的代码没有显示整个函数,但您可能在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和C++之间存在差异。例如,在C89中,不能在代码块的中间声明变量,只能在开头声明。
查看错误描述:http://msdn.microsoft.com/en-us/library/76c9k4ah%28v=vs.71%29.aspx
通过将扩展名更改为.cpp,Visual Studio使用C++编译器而不是C编译器(这是一种完全不同的语言)。
因此,您可能编写了C++代码并将其输入到C编译器中,这(巧合地)导致了抛出错误。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- 错误 C2275 RHandle:非法使用此类型作为表达式
- 编译器错误C2275
- 在语句中创建 COM 智能指针时出现错误 C2275 "if"
- 奇怪的错误 C2275 ..非法使用此类型作为成员函数模板和 lambda 的表达式