无论出于何种原因,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;
你知道为什么没有显示任何内容吗?
答案 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不起作用。