2012-07-21 187 views
1

我正在嘗試編譯幾年前編寫的模擬鼠標點擊和擊鍵的程序。我已經將它降低到這個最小例如:'INPUT'未在此範圍內聲明

#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那樣工作嗎?或者,也許我忘了給編譯器提供一個標誌?

+2

你的代碼在哪裏添加了定義?它應該是你所擁有的第一行。 – chris 2012-07-21 22:12:12

+0

在VC++ 2010中編譯得很好。 – Mysticial 2012-07-21 22:12:24

+0

@chris,好偵探工作。我在'include'之後和'main'之前加上了define。我沒有想到把它放在'include'之前,儘管事後看來很明顯。現在正在工作。 – Kevin 2012-07-21 22:22:54

回答

5

您錯過了#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 ""導入。