2012-05-05 6 views
6

Ich hoffe, jemand kann mir bei diesem kleinen Problem helfen, da ich nirgendwo hin komme. Erstens her der Code:cout/endl kann nicht verwendet werden, wenn extern "C"

#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; 
} 

Es wird mich nicht die std Sachen verwenden lassen (dh cout, cin, endl usw.). Es erlaubt mir nur, es zu benutzen, wenn ich den ganzen externen "C" -Code herausnehme ... Warum ist das? Und gibt es einen Weg dahin?

EDIT: Sorry, vergessen Sie den genauen Fehler zu sagen: Es sagt identifier „cout“

undefiniert ist

Dank

+0

Ich würde global ohnehin nicht std. Sie könnten den using namespace std; innerhalb der Hauptleitung. – ervinbosenbacher

+0

Welchen Zweck erfüllt 'extern' C 'hier? –

+0

Da cout kein C-Schlüsselwort ist, sondern eine C++ - Singleton-Instanz. Sie können nicht auf C++ - Objekte aus reinem C-Code zugreifen (obwohl es umgekehrt möglich ist). –

Antwort

0

Ich habe das Problem herausgefunden, ich habe nicht die Verzeichnisse in der richtigen Reihenfolge in VC++ - Verzeichnisse hinzugefügt.

sollte die Reihenfolge:

C: \ WinDDK \ 7600.16385.1 \ inc \ ddk

$ (VCInstallDir)

$ (VCInstallDir) umfassen atlmfc \ include

C : \ WinDDK \ 7600.16385.1 \ inc \ api

$ (WindowsSdkDir) umfassen

$ (FrameworkSDKDir) \ include

Sie wissen nicht, warum es in dieser Reihenfolge sein muss, aber es funktioniert jetzt ... sehr seltsam ...

+0

Treiberentwicklung ist anders. Sie sollten Code in C schreiben und Sie müssen vorsichtig sein, welche Header Sie einschließen. Nur Kopfzeilen der obersten Ebene, z.B. ntddk.h –

+0

@DavidHeffernan Danke für den Rat :). Ich weiß, dass du in C immer wieder Schreibtreiber geschrieben hast, aber ist es wirklich so schlimm, es in C++ zu schreiben? – Danny

+2

Ja ist es. Was werden Sie tun, wenn Ihr C++ Code eine Ausnahme auslöst? Das ist bei einem Fahrer nicht schön. Und es gibt andere Sorgen. Eine Websuche führte mich zu dieser Diskussion: http://msdn.microsoft.com/en-us/windows/hardware/gg487420 –

3

Es ist etwas falsch mit Ihrem Kompilierungsumgebung ist. Mit diesem Code ist nichts falsch. Es kompiliert und läuft gut.

In einem Kommentar zu der Frage sagen Sie:

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?

In der Tat Sie einfach Code in C anstatt C++ für die Treiberentwicklung schreiben soll.

+0

hmm ... wusste nie, dass Sie den Code als C: S kompilieren können. Wie überprüfe ich es? : S – Danny

+0

Wie kompilieren Sie es? Welcher Compiler und welche Befehlszeilenoption? Und wie heißt die Datei? Insbesondere was ist die Erweiterung. –

+0

Ich benutze Visual Studios 2010. Der Dateiname ist Mainframe.cpp – Danny