2010-04-13 9 views
13

Por alguna razón, std :: cout no muestra nada con mi aplicación. La descripción de mi entorno de desarrollo sigue.¿Qué puede explicar std :: cout para que no se muestre nada?

Estoy trabajando en una aplicación Qt utilizando Qt Creator. Como Qt Creator no se puede iniciar desde mi estación (XP64), actualmente lo estoy desarrollando con Visual Studio 2008 y el complemento Qt (al importar el archivo de proyecto .pro). Todo parece estar bien y la aplicación funciona.

En algunos casos (dependiendo de los argumentos de la línea de comando), no quiero iniciar el HIM, solo para mostrar unas pocas frases en la CLI (por ejemplo, argumentos requeridos en la línea de comandos).

No obtengo ningún error, pero no se muestra nada. El código correspondiente, que estoy seguro de que se ejecuta es el (clásico) siguiente:

std::cout << "is this going to be displayed ?" << std::endl; 

¿Tiene usted alguna idea de por qué no se muestra nada?

+0

¿Por qué no pones un punto de quiebre en esta línea y ves si este fragmento de código está realmente ejecutado o no ...? ¿se ejecuta ...? –

+0

Se ejecuta. –

+0

Tuve un problema similar, pero fue porque escribí 'std :: cout <<" Número de puntos clave SIFT: "+ siftImageKeypoints.size() << std :: endl;'. La resolución era reemplazar el + con <<. –

Respuesta

16

Bien, respuesta encontrada. Respuesta simple, por supuesto, como siempre cuando se encuentran con tales problemas. Michael Aaron estaba en los caminos correctos.

Simplemente cambiando SubSystem a la consola en la configuración del proyecto (/ Propiedades de configuración/Enlazador/Sistema) hace que todo funcione. La GUI todavía funciona, pero con una consola de fondo. Puedo lidiar con eso.

+0

Todavía hay algo mal con eso porque puedo ver fácilmente 'cout' que normalmente no puedo ver si uso el shell de cygwin para iniciar el programa. Eso es probablemente porque la mayoría de los programas de WinAPI usan 'WriteConsole' para producir datos en lugar de' cout' y 'stdout'. –

4

Windows distingue entre aplicaciones de consola y aplicaciones de GUI, y no crea una consola para aplicaciones de GUI, de forma predeterminada (see this page from MSDN). Puede usar AllocConsole para crear uno.

+0

He intentado ejecutarlo desde "cmd" –

+0

@Benoit, no importa dónde lo lance ... depende totalmente de la aplicación, ya sea que use el WinMain u otras funciones asociadas con la GUI de Windows. –

+0

Sí, lo entiendo ahora. –

0

Quizás no sea la línea std :: cout la que lo hace que no se muestre, sino la función que lo contiene. Tal vez no se invoca en absoluto, y es por eso que std :: cout no funciona.

14

En Windows, los programas generalmente se crean como SUBSYSTEM:WINDOWS application or as SUBSYSTEM:CONSOLE.

Se espera que los programas creados con SUBSYSTEM: CONSOLA sean aplicaciones en modo texto. Para este tipo de aplicación, stdout y stderr imprimen en la consola desde la que los lanzaron, creando una nueva consola si es necesario.

Por el contrario, las aplicaciones SUBSYSTEM: WINDOWS no se molestan con una consola. Todavía puede escribir en stdout y stderr, pero no van a ninguna parte. Puede usar AllocConsole para crear una consola para imprimir, pero tenga en cuenta que esto siempre se imprimirá en una ventana de consola recién creada, no en una ventana de consola desde la que inició el programa.

Un truco para las aplicaciones de SUBSYSTEM: WINDOWS es que, aunque no haya una consola, puede seguir utilizando stdout y stderr. Así que a la salida estándar de tubo, que puede hacer:

YourApplication.exe > output.txt 

o si tiene cat (o un equivalente):

YourApplication.exe | cat 

También tenga en cuenta que no hay realmente ninguna diferencia entre SUBSISTEMA: aplicaciones de Windows y el subsistema: CONSOLA aplicaciones distintas de cómo Windows las trata creando el proceso. (Puede crear ventanas en aplicaciones SUBSYSTEM: CONSOLE.) You therefore can easily switch between SUBSYSTEM types (por ejemplo, para usar SUBSYSTEM: CONSOLE para compilaciones de depuración y SUBSYSTEM: WINDOWS para las versiones).

+0

No lo sabía. Gracias. – msandiford

+0

para obtener stderr también: 'YourApplication.exe 2> & 1 | cat' – JDiMatteo

8

Trate

CONFIG + = consola

en su archivo .pro.

+0

Obras, gracias. – Calvin1602

+0

No olvide marcar como respuesta, si está satisfecho con esta respuesta y cree que resuelve su problema (que obviamente hace). – rbaleksandar

Cuestiones relacionadas