2012-05-05 23 views
6

Espero que alguien me pueda ayudar con este pequeño problema ya que no estoy obteniendo nada. En primer lugar, aquí está el código:No puedo usar cout/endl cuando 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; 
} 

No me deja utilizar el material std (es decir, cout, cin, endl etc). Solo me permitirá usarlo cuando saque todo el código externo "C" ... ¿Por qué? ¿Y hay una forma de evitar esto?

EDIT: Lo sentimos, se olvide de decirle el error exacto: Se dice identificador "cout" no está definido

Gracias

+0

yo no usaría std global de todos modos. Puede mover el espacio de nombres de uso std; dentro de la principal. – ervinbosenbacher

+0

¿Para qué sirve 'extern" C "' aquí? –

+0

Porque cout no es una palabra clave C, sino una instancia única de C++. No puede acceder a los objetos C++ desde el código C simple (aunque es posible al revés). –

Respuesta

0

He descubierto el problema, no estaba agregando los directorios en el orden correcto en los directorios de VC++.

La orden debe ser:

C: \ WinDDK \ 7600.16385.1 \ inc \ ddk

$ (VCInstallDir) incluyen

$ (VCInstallDir) atlmfc \ incluyen

C : \ WinDDK \ 7600.16385.1 \ inc \ api

$ (WindowsSdkDir) incluyen

$ (FrameworkSDKDir) \ incluyen

No sé por qué tiene que ser en este orden, pero funciona ahora ... Muy extraño ...

+0

El desarrollo del controlador es diferente. Deberías escribir el código en C y debes tener cuidado con los encabezados que incluyas. Solo incluye encabezados de nivel superior, p. ntddk.h –

+0

@DavidHeffernan Gracias por el consejo :). Sé que seguiste diciendo controladores de escritura en C, pero ¿es realmente tan malo escribirlo en C++? – Danny

+2

Sí lo es. ¿Qué harás cuando tu código C++ genere una excepción? Eso no es lindo en un controlador. Y hay otras preocupaciones. Una búsqueda web me llevó a esta discusión: http://msdn.microsoft.com/en-us/windows/hardware/gg487420 –

3

Hay algo mal con su entorno de compilación. No hay nada malo con ese código. Se compila y funciona bien.

En un comentario a la pregunta que dicen:

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?

De hecho, usted simplemente debe escribir código en C en lugar de C++ para el desarrollo de controladores.

+0

hmm ... nunca supo que puede compilar el código como C: S. ¿Cómo lo verifico? : S – Danny

+0

¿Cómo lo compila? ¿Qué compilador y qué opción de línea de comando? ¿Y cuál es el nombre del archivo? En particular, cuál es la extensión. –

+0

Estoy usando Visual Studios 2010. El nombre del archivo es Mainframe.cpp – Danny