Что может объяснить станд.:: суд для не отображения чего-нибудь?

По любой причине, станд.:: суд ничего не отображает с моим приложением. Описание моей среды разработки следует.

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

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

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

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

У Вас есть какая-либо идея, почему ничто не отображено?

15
задан Benoît 13 April 2010 в 08:05
поделиться

5 ответов

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

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

17
ответ дан 1 December 2019 в 00:26
поделиться

Попробуйте использовать

CONFIG + = console

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

9
ответ дан 1 December 2019 в 00:26
поделиться

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

4
ответ дан 1 December 2019 в 00:26
поделиться

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

0
ответ дан 1 December 2019 в 00:26
поделиться

В 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 для выпускных).

18
ответ дан 1 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: