关于vs2008编译问题的问题
我的vs2008以前在编译的时候好好的。,不知为什么昨天晚上跳出一个错误,我忘记了,点的是以后编译不错的也错,我先上代码:
- C/C++ code
#include<windows.h>#include<stdio.h>#include<process.h>HANDLE hout;HANDLE hin;//unsigned __stdcall MoveSquare();VOID PrintError(const char *szErr,int iErrCord){ printf("%s:%d\n",szErr,iErrCord); system("pause"); exit(iErrCord);}int main(){ //设置窗口大小 SMALL_RECT srWindowSize; CONSOLE_SCREEN_BUFFER_INFO csScrBufInfo; hout=GetStdHandle(STD_OUTPUT_HANDLE); if(hout==INVALID_HANDLE_VALUE) PrintError("hout is invalid",GetLastError()); GetConsoleScreenBufferInfo(hout,&csScrBufInfo); printf("dwMaximumWindowSize:x=%d,y=%d\n", csScrBufInfo.dwMaximumWindowSize.X, csScrBufInfo.dwMaximumWindowSize.Y); printf("Current window size:left=%d,top=%d,right=%d,button=%d\n", csScrBufInfo.srWindow.Left,csScrBufInfo.srWindow.Top, csScrBufInfo.srWindow.Right,csScrBufInfo.srWindow.Bottom); printf("wAttributes:%d\n",csScrBufInfo.wAttributes); srWindowSize=csScrBufInfo.srWindow; //隐藏光标 DWORD dwCurrentSet; CONSOLE_CURSOR_INFO csCurInfo; ZeroMemory(&csCurInfo,sizeof(csCurInfo)); csCurInfo.bVisible=FALSE; if(!SetConsoleCursorInfo(hout,&csCurInfo)) PrintError("SetConsoleCursorInfo error",GetLastError()); hin=GetStdHandle(STD_INPUT_HANDLE); if(hin==INVALID_HANDLE_VALUE) PrintError("hin is invalid",GetLastError()); GetConsoleMode(hin,&dwCurrentSet); if(!SetConsoleMode(hin,~ENABLE_MOUSE_INPUT)) PrintError("SetConsoleMode error",GetLastError()); //设置方块坐标和颜色 COORD crCurPos={ srWindowSize.Right/2,srWindowSize.Bottom/2 }; SetConsoleCursorPosition(hout,crCurPos); SetConsoleTextAttribute(hout,FOREGROUND_GREEN); printf("O"); if(!SetConsoleMode(hin,dwCurrentSet)) PrintError("SetConsoleMode error",GetLastError()); CloseHandle(hin); CloseHandle(hout);}这代码运行没问题,我在cfree通过,
在vs里有19个错误,错误如下:
1>------ 已启动生成: 项目: C_C++_TEST, 配置: Debug Win32 ------
1>正在编译...
1>square.c
1>e:\c_c++_exercise\free_c_test\square.c(38) : error C2275: “DWORD”: 将此类型用作表达式非法
1> c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(152) : 参见“DWORD”的声明
1>e:\c_c++_exercise\free_c_test\square.c(38) : error C2146: 语法错误 : 缺少“;”(在标识符“dwCurrentSet”的前面)
1>e:\c_c++_exercise\free_c_test\square.c(38) : error C2065: “dwCurrentSet”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(39) : error C2275: “CONSOLE_CURSOR_INFO”: 将此类型用作表达式非法
1> c:\program files\microsoft sdks\windows\v6.0a\include\wincon.h(195) : 参见“CONSOLE_CURSOR_INFO”的声明
1>e:\c_c++_exercise\free_c_test\square.c(39) : error C2146: 语法错误 : 缺少“;”(在标识符“csCurInfo”的前面)
1>e:\c_c++_exercise\free_c_test\square.c(39) : error C2065: “csCurInfo”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(40) : error C2065: “csCurInfo”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(40) : error C2065: “csCurInfo”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(41) : error C2065: “csCurInfo”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(41) : error C2224: “.bVisible”的左侧必须具有结构/联合类型
1>e:\c_c++_exercise\free_c_test\square.c(42) : error C2065: “csCurInfo”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(42) : warning C4133: “函数”: 从“int *”到“const CONSOLE_CURSOR_INFO *”的类型不兼容
1>e:\c_c++_exercise\free_c_test\square.c(47) : error C2065: “dwCurrentSet”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(52) : error C2275: “COORD”: 将此类型用作表达式非法
1> c:\program files\microsoft sdks\windows\v6.0a\include\wincon.h(38) : 参见“COORD”的声明
1>e:\c_c++_exercise\free_c_test\square.c(52) : error C2146: 语法错误 : 缺少“;”(在标识符“crCurPos”的前面)
1>e:\c_c++_exercise\free_c_test\square.c(52) : error C2065: “crCurPos”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(52) : error C2059: 语法错误 : “{”
1>e:\c_c++_exercise\free_c_test\square.c(55) : error C2065: “crCurPos”: 未声明的标识符
1>e:\c_c++_exercise\free_c_test\square.c(55) : error C2440: “函数”: 无法从“int”转换为“COORD”
1>e:\c_c++_exercise\free_c_test\square.c(55) : warning C4024: “SetConsoleCursorPosition”: 形参和实参 2 的类型不同
1>e:\c_c++_exercise\free_c_test\square.c(59) : error C2065: “dwCurrentSet”: 未声明的标识符
1>生成日志保存在“file://e:\c_c++_exercise\VS2008CODETEST\C_C++_TEST\C_C++_TEST\Debug\BuildLog.htm”
1>C_C++_TEST - 19 个错误,2 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这怎么办,求解
[解决办法]
你的代码我运行没问题,仅仅少个return 0;你建个空工程再试试。
- C/C++ code
#include<windows.h>#include<stdio.h>#include<process.h>HANDLE hout;HANDLE hin;//unsigned __stdcall MoveSquare();VOID PrintError(const char *szErr,int iErrCord){ printf("%s:%d\n",szErr,iErrCord); system("pause"); exit(iErrCord);}int _tmain(int argc, _TCHAR* argv[]){ //设置窗口大小 SMALL_RECT srWindowSize; CONSOLE_SCREEN_BUFFER_INFO csScrBufInfo; hout=GetStdHandle(STD_OUTPUT_HANDLE); if(hout==INVALID_HANDLE_VALUE) PrintError("hout is invalid",GetLastError()); GetConsoleScreenBufferInfo(hout,&csScrBufInfo); printf("dwMaximumWindowSize:x=%d,y=%d\n", csScrBufInfo.dwMaximumWindowSize.X, csScrBufInfo.dwMaximumWindowSize.Y); printf("Current window size:left=%d,top=%d,right=%d,button=%d\n", csScrBufInfo.srWindow.Left,csScrBufInfo.srWindow.Top, csScrBufInfo.srWindow.Right,csScrBufInfo.srWindow.Bottom); printf("wAttributes:%d\n",csScrBufInfo.wAttributes); srWindowSize=csScrBufInfo.srWindow; //隐藏光标 DWORD dwCurrentSet; CONSOLE_CURSOR_INFO csCurInfo; ZeroMemory(&csCurInfo,sizeof(csCurInfo)); csCurInfo.bVisible=FALSE; if(!SetConsoleCursorInfo(hout,&csCurInfo)) PrintError("SetConsoleCursorInfo error",GetLastError()); hin=GetStdHandle(STD_INPUT_HANDLE); if(hin==INVALID_HANDLE_VALUE) PrintError("hin is invalid",GetLastError()); GetConsoleMode(hin,&dwCurrentSet); if(!SetConsoleMode(hin,~ENABLE_MOUSE_INPUT)) PrintError("SetConsoleMode error",GetLastError()); //设置方块坐标和颜色 COORD crCurPos={ srWindowSize.Right/2,srWindowSize.Bottom/2 }; SetConsoleCursorPosition(hout,crCurPos); SetConsoleTextAttribute(hout,FOREGROUND_GREEN); printf("O"); if(!SetConsoleMode(hin,dwCurrentSet)) PrintError("SetConsoleMode error",GetLastError()); CloseHandle(hin); CloseHandle(hout); return 0;}
[解决办法]
好像这个问题
error C2275: “DWORD”: 将此类型用作表达式非法
主要是缺少定义,加一个定义就可以了,
另外看起来好像你的vc的编译路径有问题,找不到或者是不能正确找到路径
[解决办法]
我编译没任何错误啊.
我也碰到过,重启一下visual studio试试,具体原因我也不清楚哈.