我正在尝试编译几年前我写的一个模拟鼠标点击和击键的程序。我把它简化为这个最小的例子:
#include "Windows.h"
int main(){
INPUT foo;
return 0;
}
它给了我这个错误:
C:\projects\clicker>g++ minimaltest.cpp
minimaltest.cpp: In function 'int main()':
minimaltest.cpp:4:2: error: 'INPUT' was not declared in this scope
minimaltest.cpp:4:8: error: expected ';' before 'foo'
MSDN在INPUT上的页面说它是在Windows.h中定义的,所以我不知道为什么它不能识别这种类型。
另一个stackoverflow用户遇到了类似的问题here,但他们的解决方案添加#define _WIN32_WINNT 0x0500
并没有解决错误。
几年前我在Windows XP上构建了这个程序。是不是INPUT在Windows 7上的运行方式与它在XP上的运行方式不同?或许我忘了给编译器提供一个标志?
答案 0 :(得分:6)
您在#define
之后忘记了#include
。结果是windows.h
将_WIN32_WINNT
视为未定义,因此未声明INPUT
。然后在INPUT
现有机会通过后定义它。
#define _WIN32_WINNT 0x0500 //RIGHT
#include "Windows.h"
#define _WIN32_WINNT 0x0500 //WRONG
int main(){
INPUT foo;
return 0;
}
作为旁注,除非windows.h
与源文件位于同一目录中,否则通常应使用#include <>
而不是#include ""
导入。