什么可以解释std :: cout不显示任何内容?

Ben*_*oît 15 c++ qt cout qt-creator visual-studio

无论出于何种原因,std :: cout都不会显示我的应用程序.我的开发环境如下所示.

我正在使用Qt Creator开发Qt应用程序.由于Qt Creator无法从我的工作站(XP64)启动,我目前正在使用Visual Studio 2008和Qt插件(通过导入.pro项目文件)进行开发.一切似乎都很好,应用程序工作.

在某些情况下(取决于命令行参数),我不想启动HIM,只是在CLI中显示几个句子(例如,命令行必需参数).

我没有收到任何错误,但没有显示任何内容.我相信运行的相应代码是(经典)以下:

std::cout << "is this going to be displayed ?" << std::endl;
Run Code Online (Sandbox Code Playgroud)

你知道为什么没有显示什么吗?

jam*_*lin 18

在Windows上,程序通常构建为SUBSYSTEM:WINDOWS应用程序或SUBSYSTEM:CONSOLE.

使用SUBSYSTEM:CONSOLE构建的程序应该是文本模式应用程序.对于这种类型的应用程序,stdout和stderr打印到您从中启动它们的控制台,如有必要,创建一个新的控制台.

相比之下,SUBSYSTEM:WINDOWS应用程序不需要使用控制台.您仍然可以写入stdout和stderr,但它们不会去任何地方.您可以使用AllocConsole创建要打印的控制台,但请注意,这将始终打印到新创建的控制台窗口,而不是打印到您启动程序的控制台窗口.

SUBSYSTEM的一个技巧:WINDOWS应用程序是即使没有控制台,你仍然可以管道stdout和stderr.所以管道stdout,你可以这样做:

YourApplication.exe > output.txt
Run Code Online (Sandbox Code Playgroud)

或者如果你有cat(或同等的):

YourApplication.exe | cat
Run Code Online (Sandbox Code Playgroud)

另请注意,SUBSYSTEM:WINDOWS应用程序和SUBSYSTEM:CONSOLE应用程序之间没有任何区别,除了Windows在创建进程时如何处理它们.(您可以在SUBSYSTEM:CONSOLE应用程序中创建窗口.)因此,您可以轻松地在SUBSYSTEM类型之间切换(例如,使用SUBSYSTEM:CONSOLE用于调试版本,SUBSYSTEM:WINDOWS用于版本版本).


Ben*_*oît 17

好的,回答发现.当然,在遇到这些问题时一如既往的简单回答.Michael Aaron走在正确的轨道上.

只需在项目配置(/ Configuration properties/Linker/System)中将SubSystem更改为Console,即可完成所有工作.GUI仍然有效,但使用后台控制台.我可以解决这个问题.


小智 9

尝试

CONFIG + = console

在.pro文件中.