2010-04-13 18 views
13

किसी भी कारण से, std :: cout मेरे आवेदन के साथ कुछ भी प्रदर्शित नहीं करता है। मेरे विकास पर्यावरण का विवरण निम्नानुसार है।std :: cout को कुछ भी प्रदर्शित न करने के लिए क्या समझा सकता है?

मैं क्यूटी निर्माता का उपयोग कर एक क्यूटी अनुप्रयोग पर काम कर रहा हूं। चूंकि क्यूटी निर्माता को मेरे स्टेशन (XP64) से लॉन्च नहीं किया जा सकता है, इसलिए मैं वर्तमान में इसे विजुअल स्टूडियो 2008 और क्यूटी प्लगइन (.pro प्रोजेक्ट फ़ाइल आयात करके) के साथ विकसित कर रहा हूं। सबकुछ ठीक लगता है और एप्लिकेशन काम करता है।

कुछ मामलों में (कमांड लाइन तर्कों के आधार पर), मैं उसे लॉन्च नहीं करना चाहता, केवल सीएलआई में कुछ वाक्यों को प्रदर्शित करने के लिए (उदाहरण के लिए कमांड लाइन आवश्यक तर्क)।

मुझे कोई त्रुटि नहीं मिली है, लेकिन कुछ भी प्रदर्शित नहीं होता है। इसी कोड, कर रहा हूँ जो मुझे यकीन है कि चलाया जाता है है (शास्त्रीय) निम्नलिखित:

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

आप किसी भी विचार क्यों कुछ नहीं प्रदर्शित किया जाता है है?

+0

आप इस लाइन पर ब्रेक पॉइंट क्यों नहीं डालते हैं और देखते हैं कि कोड का यह टुकड़ा वास्तव में निष्पादित है या नहीं ...? क्या इसे निष्पादित किया गया है ...? –

+0

इसे निष्पादित किया गया है। –

+0

मेरे पास एक समान समस्या थी, लेकिन ऐसा इसलिए था क्योंकि मैंने 'std :: cout <<" SIFT कीपॉइंट्स की संख्या लिखा: "+ siftImageKeypoints.size() << std :: endl;'। संकल्प को << के साथ बदलना था। –

उत्तर

16

ठीक है, उत्तर मिला। सरल उत्तर, ज़ाहिर है, हमेशा ऐसी समस्याओं का सामना करते समय हमेशा के रूप में। माइकल हारून सही पटरियों पर था।

बस प्रोजेक्ट कॉन्फ़िगरेशन (/ कॉन्फ़िगरेशन गुण/लिंकर/सिस्टम) में कंसोल के लिए सबसिस्टम को बदलना पूरी चीज को काम करता है। जीयूआई अभी भी काम करता है, लेकिन पृष्ठभूमि कंसोल के साथ। मेरे द्वारा उससे निपटा जा सकता है।

+0

इसमें अभी भी कुछ गड़बड़ है क्योंकि मैं आसानी से 'कोउट' देख सकता हूं जिसे मैं आमतौर पर नहीं देख सकता हूं कि मैं प्रोग्राम लॉन्च करने के लिए साइगविन के खोल का उपयोग करता हूं या नहीं। ऐसा शायद इसलिए है क्योंकि अधिकांश WinAPI प्रोग्राम 'cout' और' stdout' के बजाय डेटा आउटपुट करने के लिए 'WriteConsole' का उपयोग करते हैं। –

4

विंडोज कंसोल अनुप्रयोगों और जीयूआई अनुप्रयोगों के बीच अंतर करता है, और डिफ़ॉल्ट रूप से जीयूआई अनुप्रयोगों के लिए कंसोल नहीं बनाता है (see this page from MSDN)। आप एक बनाने के लिए AllocConsole का उपयोग कर सकते हैं।

+0

मैंने इसे "cmd" –

+0

@Benoit से लॉन्च करने का प्रयास किया है, इससे कोई फ़र्क नहीं पड़ता कि आप इसे कहां लॉन्च करते हैं ... यह पूरी तरह से एप्लिकेशन पर निर्भर करता है (चाहे WinMain या Windows GUI से जुड़े अन्य फ़ंक्शंस का उपयोग करता हो)। –

+0

हां, मुझे अब यह मिल गया है। –

0

शायद यह std :: cout लाइन नहीं है जो इसे प्रदर्शित नहीं करता है, लेकिन इसमें कार्य शामिल है। शायद यह बिल्कुल नहीं बुलाया जाता है, और यही कारण है कि std :: cout काम नहीं करता है।

14

विंडोज़ पर, प्रोग्राम आमतौर पर SUBSYSTEM:WINDOWS application or as SUBSYSTEM:CONSOLE के रूप में बनाए जाते हैं।

सबसस्टेम के साथ बनाए गए कार्यक्रम: CONSOLE टेक्स्ट-मोड अनुप्रयोग होने की उम्मीद है। इस प्रकार के एप्लिकेशन के लिए, कंसोल पर stdout और stderr प्रिंट जो आपने उन्हें लॉन्च किया है, यदि आवश्यक हो तो नया कंसोल बनाना।

इसके विपरीत, सबस्टेस्टम: विंडोज़ एप्लिकेशन कंसोल से परेशान नहीं हैं। आप अभी भी stdout और stderr को लिख सकते हैं, लेकिन वे कहीं भी नहीं जाते हैं। प्रिंट करने के लिए कंसोल बनाने के लिए आप AllocConsole का उपयोग कर सकते हैं, लेकिन ध्यान दें कि यह हमेशा एक नव निर्मित कंसोल विंडो पर प्रिंट करेगा, न कि कंसोल विंडो से जिसे आपने प्रोग्राम लॉन्च किया था।

सबसस्टेम के लिए एक चाल: विंडोज़ एप्लिकेशन यह है कि भले ही कोई कंसोल नहीं है, फिर भी आप पाइप स्टडआउट और स्टडरर पाइप कर सकते हैं। पाइप stdout के लिए तो, आप कर सकते हैं:

YourApplication.exe > output.txt 

या यदि आप cat (एक बराबर या) है:

YourApplication.exe | cat 

यह भी ध्यान रखें वहाँ वास्तव में सबसिस्टम के बीच कोई अंतर नहीं है कि: WINDOWS अनुप्रयोगों और सबसिस्टम: विंडोज़ प्रक्रिया को बनाने के तरीके के अलावा अन्य अनुप्रयोगों को समझें। (आप सब्सस्टेम में विंडोज़ बना सकते हैं: कंसोल एप्लिकेशन।) You therefore can easily switch between SUBSYSTEM types (उदाहरण के लिए, सबस्टेस्टम का उपयोग करने के लिए: डीबग बिल्ड और सबस्टेस्टम के लिए CONSOLE: रिलीज़ वाले के लिए विंडोज़)।

+0

मुझे यह नहीं पता था। धन्यवाद। – msandiford

+0

stderr भी प्राप्त करने के लिए: 'YourAplication.exe 2> & 1 | बिल्ली ' – JDiMatteo

8

अपने .pro फ़ाइल में

कॉन्फ़िग + = सांत्वना

की कोशिश करो।

+0

काम करता है, धन्यवाद। – Calvin1602

+0

उत्तर के रूप में चिह्नित करने के लिए मत भूलना, अगर आप इस उत्तर से संतुष्ट हैं और सोचते हैं कि यह आपकी समस्या का समाधान करता है (जो आप स्पष्ट रूप से करते हैं)। – rbaleksandar

संबंधित मुद्दे