16

何らかの理由で、std::coutは私のアプリケーションでは何も表示しません。私の開発環境の説明は次のとおりです。

QtCreatorを使用してQtアプリケーションに取り組んでいます。Qt Creatorは自分のステーション(XP64)から起動できないため、現在Visual Studio 2008とQtプラグイン(.proプロジェクトファイルをインポートすることにより)を使用して開発しています。すべてが正常に見え、アプリケーションは機能します。

場合によっては(コマンドラインの引数によっては)、CLIで数文を表示するためだけにHIMを起動したくない場合があります(たとえば、コマンドラインに引数が必要です)。

エラーは発生しませんが、何も表示されません。私が実行していると確信している対応するコードは、次の(クラシック)です:

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

何も表示されない理由がわかりますか?

4

5 に答える 5

22

Windowsでは、プログラムは通常、SUBSYSTEM:WINDOWSアプリケーションまたはSUBSYSTEM:CONSOLEのいずれかとしてビルドされます。

SUBSYSTEM:CONSOLEで構築されたプログラムは、テキストモードのアプリケーションであることが期待されています。このタイプのアプリケーションの場合、stdoutとstderrは、それらを起動したコンソールに出力し、必要に応じて新しいコンソールを作成します。

対照的に、SUBSYSTEM:WINDOWSアプリケーションはコンソールを気にしません。stdoutとstderrに書き込むことはできますが、通常はどこにも行きません。AllocConsoleを使用して、印刷先のコンソールを作成できますが、これは、プログラムを起動したコンソールウィンドウではなく、常に新しく作成されたコンソールウィンドウに印刷されます。

SUBSYSTEM:WINDOWSアプリケーションのトリックの1つは、コンソールがなくても、stdoutとstderrをパイプできることです。stdoutをパイプするには、次の操作を実行できます。

YourApplication.exe > output.txt

またはあなたが持っている場合cat(または同等のもの):

YourApplication.exe | cat

また、SUBSYSTEM:WINDOWSアプリケーションとSUBSYSTEM:CONSOLEアプリケーションの間には、プロセスの作成時にWindowsがそれらをどのように処理するかを除いて、実際には違いがないことにも注意してください。(SUBSYSTEM:CONSOLEアプリケーションでウィンドウを作成できます。)したがって、SUBSYSTEMタイプを簡単に切り替えることができます(たとえば、デバッグビルドにはSUBSYSTEM:CONSOLEを使用し、リリースビルドにはSUBSYSTEM:WINDOWSを使用します)。

于 2010-04-13T08:27:29.217 に答える
18

わかりました、答えが見つかりました。もちろん、そのような問題に遭遇したときはいつものように、簡単な答えです。マイケル・アーロンは正しい方向に進んでいました。

プロジェクト構成(/構成プロパティ/リンカー/システム)でサブシステムをコンソールに変更するだけで、すべてが機能します。GUIは引き続き機能しますが、バックグラウンドコンソールを使用します。私はそれに対処することができます。

于 2010-04-13T08:17:52.740 に答える
9

試す

CONFIG+=コンソール

.proファイル内。

于 2010-04-13T23:08:16.993 に答える
4

Windowsは、コンソールアプリケーションとGUIアプリケーションを区別し、デフォルトではGUIアプリケーション用のコンソールを作成しません(MSDNのこのページを参照)。AllocConsoleを使用して作成できます。

于 2010-04-13T08:12:13.553 に答える
0

おそらく、それを表示しないのはstd :: cout行ではなく、それを含む関数です。たぶんそれはまったく呼び出されません、そしてそれがstd::coutが機能しない理由です。

于 2010-04-13T08:21:14.537 に答える