2012-05-05 24 views
6

Spero che qualcuno possa aiutarmi in questo piccolo problema poiché non sto ottenendo affatto dove. In primo luogo, ecco il codice:Impossibile utilizzare cout/endl quando 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; 
} 

Non mi permette di utilizzare il materiale std (cioè cout, cin, endl ecc). Mi consentirà solo di usarlo quando estrarrò tutto il codice "C" esterno ... Perché è così? E c'è un modo per aggirare questo?

EDIT: Siamo spiacenti, dimenticare di dirvi l'errore esatto: Si dice identificatore "cout" non è definito

Grazie

+0

Non vorrei usare std a livello globale in ogni caso. Si potrebbe spostare lo spazio dei nomi using std; all'interno del main. – ervinbosenbacher

+0

Quale scopo serve "extern" C "'? –

+0

Perché cout non è una parola chiave C ma un'istanza singleton C++. Non è possibile accedere agli oggetti C++ dal semplice codice C (anche se è possibile il contrario). –

risposta

0

Ho scoperto il problema, non stavo aggiungendo le directory nell'ordine corretto nelle directory VC++.

L'ordine dovrebbe essere:

C: \ WinDDK \ 7600.16385.1 \ inc \ DDK

$ (VCInstallDir) includono

$ (VCInstallDir) atlmfc \ includono

C : \ WinDDK \ 7600.16385.1 \ inc \ api

$ (WindowsSdkDir) includono

$ (FrameworkSDKDir) \ includono

Non so perché ha bisogno di essere in questo ordine, ma funziona ora ... Molto strano ...

+0

Lo sviluppo del driver è diverso. Dovresti scrivere il codice in C e devi fare attenzione a quali intestazioni includere. Includere solo intestazioni di livello superiore, ad es. ntddk.h –

+0

@DavidHeffernan Grazie per il consiglio :). So che continuavi a dire driver di scrittura in C, ma è davvero così brutto scrivere in C++ ?? – Danny

+2

Sì, lo è. Cosa farai quando il tuo codice C++ solleva un'eccezione? Non è carino per un guidatore. E ci sono altre preoccupazioni. Un websearch mi ha portato a questa discussione: http://msdn.microsoft.com/en-us/windows/hardware/gg487420 –

3

C'è qualcosa che non va con il vostro ambiente di compilazione. Non c'è niente di sbagliato in quel codice. Compila e funziona bene.

In un commento alla domanda che dicono:

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 realtà si dovrebbe semplicemente scrivere codice in C piuttosto che C++ per lo sviluppo di driver.

+0

hmm ... non hai mai saputo che puoi compilare il codice come C: S. Come posso verificarlo ?? : S – Danny

+0

Come lo compili? Quale compilatore e quale opzione della riga di comando? E qual è il nome del file? In particolare qual è l'estensione. –

+0

Sto usando Visual Studios 2010. Il nome del file è Mainframe.cpp – Danny

Problemi correlati