2010-04-13 3 views
13

이유가 무엇이든간에 std :: cout은 내 애플리케이션에 아무 것도 표시하지 않습니다. 내 개발 환경에 대한 설명은 다음과 같습니다.std :: cout이 무엇을 표시하지 않는지 설명 할 수 있습니까?

Qt Creator를 사용하여 Qt 응용 프로그램을 작성 중입니다. Qt Creator는 내 스테이션 (XP64)에서 시작할 수 없으므로 현재 Visual Studio 2008 및 Qt 플러그인 (.pro 프로젝트 파일 가져 오기)으로 개발 중입니다. 모든 것이 잘되고 응용 프로그램이 작동합니다.

일부 경우 (명령 줄 인수에 따라 다름) CLI (명령 줄에 필요한 인수 등)에 몇 문장 만 표시하기 위해 HIM을 시작하지 않으려 고합니다.

아무런 오류가 발생하지 않지만 아무 것도 표시되지 않습니다. 나는 확실히 실행하고 해당 코드입니다 (고전) 다음

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

당신이 아무것도 표시되지 않는 이유는 어떤 생각을 가지고 있습니까?

+0

왜이 줄에 중단 점을 넣고이 코드가 실제로 실행되는지 여부를 확인하지 마십시오 ...? 처형되는거야? –

+0

실행됩니다. –

+0

비슷한 문제가 있었지만'std :: cout << "SIFT 키포인트 수를 썼기 때문에 발생했습니다 :"+ siftImageKeypoints.size() << std :: endl;'. 해결책은 +를 <<로 대체하는 것이 었습니다. –

답변

16

좋아, 답을 찾았습니다. 물론 이러한 문제에 직면했을 때와 마찬가지로 간단한 대답입니다. Michael Aaron은 올바른 길을 걷고있었습니다.

프로젝트 구성 (/ 구성 등록 정보/링커/시스템)에서 서브 시스템을 콘솔로 간단히 변경하면 모든 작업이 가능합니다. GUI는 여전히 작동하지만 백그라운드 콘솔을 사용합니다. 나는 그것을 처리 할 수있다.

+0

Cygwin의 셸을 사용하여 프로그램을 시작하면 일반적으로 볼 수없는'cout '을 쉽게 볼 수 있기 때문에 여전히 문제가 있습니다. 아마도 대부분의 WinAPI 프로그램은'cout'과'stdout' 대신에'WriteConsole'을 사용하여 데이터를 출력하기 때문입니다. –

4

Windows는 콘솔 응용 프로그램과 GUI 응용 프로그램을 구분하며 기본적으로 GUI 응용 프로그램 용 콘솔을 만들지 않습니다 (see this page from MSDN). AllocConsole을 사용하여 만들 수 있습니다.

+0

"cmd"에서 시작하려고 시도했습니다 –

+0

@Benoit, 시작 위치는 중요하지 않습니다 ... WinMain 또는 Windows GUI와 관련된 다른 기능을 사용하는지 여부에 관계없이 응용 프로그램 자체에 전적으로 의존합니다. –

+0

예, 이제 알겠습니다. –

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이있는 경우 : 파이프 표준 출력 그래서, 당신은 할 수있는 Windows 응용 프로그램 및 SUBSYSTEM :

YourApplication.exe | cat 

또한 하위 시스템의 차이가 정말이 아니다 있습니다 : Windows가 프로세스를 작성하는 방법을 다루는 것 이외의 다른 응용 프로그램 콘솔. (SUBSYSTEM : CONSOLE 응용 프로그램에서 창을 만들 수 있습니다.) You therefore can easily switch between SUBSYSTEM types (예 : 디버그 빌드에는 SUBSYSTEM : CONSOLE을 사용하고 릴리스 빌드에는 SUBSYSTEM : WINDOWS를 사용합니다).

+0

나는 그것을 몰랐다. 감사. – msandiford

+0

도 stderr를 얻으려고합니다 :'YourApplication.exe 2> & 1 | 고양이' – JDiMatteo

8

은 .PRO 파일에 CONFIG + = 콘솔

을보십시오.

+0

고맙습니다. – Calvin1602

+0

이 답장에 만족하고 문제가 해결되었다고 생각하는 경우 대답으로 표시하는 것을 잊지 마십시오. – rbaleksandar

관련 문제