2010-04-13 122 views
13

無論出於何種原因,std :: 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; 

你有爲什麼沒有顯示任何想法?

+0

爲什麼不把一個破發點,在這條線,看看是否真的執行這段代碼或不...?它被執行了嗎? – 2010-04-13 08:12:10

+0

它被執行。 – 2010-04-13 08:15:43

+0

我也有類似的問題,但它是因爲我寫的'性病::法院<< 「SIFT關鍵點的數目:」 + siftImageKeypoints.size()<<的std :: ENDL;'。決議是用<<替換+。 – 2013-07-01 04:18:24

回答

16

好的,找到答案。當然,遇到這種問題時一如既往的簡單答案。邁克爾·亞倫走在了正確的軌道上。

只需將項目配置(/配置屬性/鏈接器/系統)中的子系統更改爲控制檯即可完成整個工作。 GUI仍然有效,但帶有後臺控制檯。我可以解決這個問題。

+0

還有一些問題,因爲我可以很容易地看到'cout',我通常無法看到是否使用cygwin的shell來啓動程序。這可能是因爲大多數WinAPI程序使用'WriteConsole'來輸出數據而不是'cout'和'stdout'。 – 2017-11-08 09:53:48

4

Windows區分控制檯應用程序和GUI應用程序,默認情況下不會爲GUI應用程序創建控制檯(see this page from MSDN)。您可以使用AllocConsole來創建一個。

+0

我試圖從「CMD」 – 2010-04-13 08:15:16

+0

@Benoit啓動它,沒關係,你推出來......這完全取決於應用程序本身(無論是使用WinMain函數或Windows圖形用戶界面相關的其他功能)。 – 2010-04-13 08:16:45

+0

是的,我現在明白了。 – 2010-04-13 08:22:07

0

也許它不是std :: cout行使它不顯示,但包含它的函數。也許它沒有被調用,這就是爲什麼std :: cout不起作用。

14

在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 

還要注意的是有沒有真正子系統之間的任何差別:Windows應用程序和子系統: CONSOLE應用程序,而不是Windows如何處理它們以創建過程。 (您可以在SUBSYSTEM:CONSOLE應用程序中創建窗口。)You therefore can easily switch between SUBSYSTEM types(例如,爲調試版本使用SUBSYSTEM:CONSOLE,爲release版本使用SUBSYSTEM:WINDOWS)。

+0

我不知道。謝謝。 – msandiford 2010-04-13 09:01:49

+0

也得到stderr:'YourApplication.exe 2>&1 |貓' – JDiMatteo 2015-01-09 16:38:07

8

嘗試

CONFIG + =控制檯

在你的.pro文件。

+0

作品,謝謝。 – Calvin1602 2012-11-02 15:20:17

+0

如果您對此回覆感到滿意並認爲它解決了您的問題(您明顯這麼做),請不要忘記標記爲答案。 – rbaleksandar 2014-07-08 06:41:14