Подтвердить что ты не робот

Что может объяснить std:: cout ничего не показывать?

По какой-то причине std:: cout ничего не отображает с моим приложением. Ниже приводится описание моей среды разработки.

Я работаю над Qt-приложением, используя Qt Creator. Поскольку Qt Creator не может быть запущен с моей станции (XP64), в настоящее время я разрабатываю его с помощью Visual Studio 2008 и Qt-плагина (путем импорта файла проекта .pro). Все кажется прекрасным, и приложение работает.

В некоторых случаях (в зависимости от аргументов командной строки) я не хочу запускать HIM, просто чтобы отобразить несколько предложений в CLI (например, требуемые аргументы командной строки).

Я не получаю никаких ошибок, но ничего не отображается. Соответствующий код, который, я уверен, запущен, является (классическим) следующим образом:

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

У вас есть идея, почему ничего не отображается?

4b9b3361

Ответ 1

Хорошо, ответ найден. Простой ответ, конечно, как всегда, когда сталкиваешься с такими проблемами. Майкл Аарон был на правильном пути.

Простое изменение SubSystem на консоль в конфигурации проекта (/Свойства конфигурации /Linker/System ) заставляет все это работать. GUI по-прежнему работает, но с фоновой консолью. Я могу справиться с этим.

Ответ 2

В Windows программы обычно создаются как приложение SUBSYSTEM: WINDOWS или как 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.) Поэтому вы можете легко переключаться между типами SUBSYSTEM (например, использовать SUBSYSTEM: CONSOLE для отладочных сборок и SUBSYSTEM: WINDOWS для выпусков).

Ответ 3

Попробуйте

CONFIG + = консоль

в вашем .pro файле.

Ответ 4

Windows различает консольные приложения и приложения GUI и по умолчанию не создает консоль для графических приложений (см. эту страницу из MSDN). Вы можете использовать AllocConsole, чтобы создать его.

Ответ 5

Возможно, это не строка std:: cout, которая делает ее не отображаемой, а содержащую ее функцию. Возможно, это вообще не вызвано, и поэтому std:: cout не работает.