2012-05-05 41 views
6

我希望有人可以幫助我解決這個小問題,因爲我根本沒有得到任何地方。首先,繼承人的代碼:當extern「C」時不能使用cout/endl

#include<string> 
#include<iostream> 
#include<Windows.h> 

using namespace std; 

extern "C" 
{ 
#include<hidsdi.h> 
#include<SetupAPI.h> 
} 

int main() 
{ 
    int iQuit; 

    cout << "Testing Program" << endl; 

    return 0; 
} 

它不會讓我使用std東西(即COUT,CIN,ENDL等)。當我拿出所有extern「C」代碼時,它只會讓我使用它......爲什麼是這樣?有沒有辦法解決這個問題?

編輯:對不起,忘了告訴你確切的錯誤:它說標識符「COUT」未定義

感謝

+0

我不會使用std全球反正。你可以移動使用命名空間std;主要內部。 – ervinbosenbacher

+0

'extern「C」''在這裏服務的目的是什麼? –

+0

因爲cout不是C關鍵字,而是C++單例實例。你不能從普通的C代碼訪問C++對象(儘管可能是相反的)。 – 2012-05-05 18:54:16

回答

0

我發現這個問題,我沒有在VC++目錄中以正確的順序添加目錄。

的順序應該是:

C:\ WINDDK \ 7600.16385.1 \ INC \ DDK

$(VCInstallDir)包括

$(VCInstallDir)atlmfc \包括

Ç :\ WINDDK \ 7600.16385.1 \ INC \ API

$(WindowsSdkDir)包括

$(FrameworkSDKDir)\包括

不知道爲什麼它需要在此順序,但現在的工作......很奇怪...

+0

驅動程序開發是不同的。你應該用C編寫代碼,並且你需要小心你包含哪些頭文件。僅包含頂級標題,例如ntddk.h –

+0

@DavidHeffernan謝謝你的建議:)。我知道你一直在用C寫驅動程序,但是用C++編寫它真的不好嗎? – Danny

+2

是的。當你的C++代碼引發異常時你會怎麼做?這在駕駛員中並不好。還有其他的擔憂。網絡搜索引導我進行這樣的討論:http://msdn.microsoft.com/en-us/windows/hardware/gg487420 –

3

也有一些是不對您的編譯環境。該代碼沒有任何問題。它編譯和運行良好。

在這個問題評論你說:

I'm learning to write a driver so I can do stuff with my devices like keyboards and mouses, so I'm using the WDK. Correct me if I'm wrong, but I thought you need to use extern "C" to use those header files?

事實上,你應該簡單地用C而不是C++代碼驅動程序開發。

+0

嗯...永遠不知道你可以編譯爲C:S的代碼。我如何檢查? :S – Danny

+0

你是如何編譯它的?什麼編譯器,什麼命令行選項?該文件的名稱是什麼?特別是什麼是擴展。 –

+0

我正在使用Visual Studios 2010.文件名是Mainframe.cpp – Danny