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

时间:2010-04-13 08:05:58

标签: c++ visual-studio qt qt-creator cout

无论出于何种原因,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;

你知道为什么没有显示任何内容吗?

5 个答案:

答案 0 :(得分:17)

好的,答案发现了。当然,在遇到这些问题时一如既往的简单回答。迈克尔·亚伦走在正确的轨道上。

在项目配置(/ Configuration properties / Linker / System)中简单地将SubSystem更改为Console可以完成所有工作。 GUI仍然有效,但使用后台控制台。我可以处理。

答案 1 :(得分:17)

在Windows上,程序通常构建为SUBSYSTEM:WINDOWS application or as SUBSYSTEM:CONSOLE

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

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

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

YourApplication.exe > output.txt

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

YourApplication.exe | cat

另请注意,SUBSYSTEM:WINDOWS应用程序和SUBSYSTEM:CONSOLE应用程序之间没有任何区别,除了Windows在创建进程时如何处理它们。 (您可以在SUBSYSTEM:CONSOLE应用程序中创建窗口。)You therefore can easily switch between SUBSYSTEM types(例如,使用SUBSYSTEM:CONSOLE用于调试版本,SUBSYSTEM:WINDOWS用于发布版本)。

答案 2 :(得分:8)

尝试

CONFIG + = console

<。>在.pro文件中。

答案 3 :(得分:4)

Windows区分控制台应用程序和GUI应用程序,默认情况下(see this page from MSDN)不为GUI应用程序创建控制台。您可以使用AllocConsole创建一个。

答案 4 :(得分:0)

也许不是std :: cout行使它不显示,而是包含它的函数。也许它根本没有被调用,这就是为什么std :: cout不起作用。