'INPUT'未在此范围内声明

时间:2012-07-21 22:10:31

标签: c++ winapi

我正在尝试编译几年前我写的一个模拟鼠标点击和击键的程序。我把它简化为这个最小的例子:

#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上的运行方式不同?或许我忘了给编译器提供一个标志?

1 个答案:

答案 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 ""导入。