Что может объяснить 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;
У вас есть идея, почему ничего не отображается?
Ответы
Ответ 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 не работает.