2012-10-20 11 views
5

का उपयोग करते समय नहीं मिला है, मैं बूस्ट :: iostreams का उपयोग अपने कंसोल और फ़ाइल में एक साथ लिखने के लिए करता हूं। जब मैं डीबग (कोर्स के जीडीबी के साथ) को ग्रहण करने के लिए ग्रहण का उपयोग करता हूं, तो मुझे एक चेतावनी मिलती है जो कहता है कि आरटीटीआई प्रतीक उन वर्गों में से एक के लिए नहीं मिला है जो मैं बूस्ट :: iostreams से उपयोग कर रहा हूं।चेतावनी संदेश आरटीटीआई प्रतीक बूस्ट :: iostreams

समस्या को पुन: उत्पन्न करने के लिए यहां न्यूनतम कोड दिया गया है।

warning: RTTI symbol not found for class 'boost::iostreams::stream<boost::iostreams::tee_device<std::ostream, std::basic_ofstream<char, std::char_traits<char> > >, std::char_traits<char>, std::allocator<char> >' 
warning: RTTI symbol not found for class 'boost::iostreams::stream_buffer<boost::iostreams::tee_device<std::ostream, std::basic_ofstream<char, std::char_traits<char> > >, std::char_traits<char>, std::allocator<char>, boost::iostreams::output>' 

चेतावनी दोहराया जाता है जब भी वस्तु cool_cout का सामना करना पड़ा है:

#ifndef BOOST_IO_STREAM_H_ 
#define BOOST_IO_STREAM_H_ 

#include <fstream> 
#include <boost/iostreams/tee.hpp> 
#include <boost/iostreams/stream.hpp> 
using boost::iostreams::tee_device; 
using boost::iostreams::stream; 

typedef tee_device<std::ostream, std::ofstream> TeeDevice; 
typedef stream<TeeDevice> TeeStream; 

#endif /* BOOST_IO_STREAM_H_ */ 

int 
main() 
{ 

    /* A config file to output experiment details */ 
    std::string self_filename = "./experimentconfig.txt"; 
    std::ofstream fconfig(self_filename.c_str()); 
    TeeDevice my_tee(std::cout, fconfig); 
    TeeStream cool_cout(my_tee); 

    cool_cout << "Output to file and console during experiment run" << std::endl; 

    return 0; 
} 

जब मैं डीबगिंग के दौरान TeeStream cool_cout(my_tee); लाइन पार, मैं नीचे चेतावनियां प्राप्त हुईं। मैं इसे कैसे ठीक करूं? बेशक, इस कोड का उपयोग करने वाले प्रोग्राम काम करते हैं और मुझे इसके साथ कोई समस्या नहीं है। चेतावनियों को अनदेखा नहीं किया जाना चाहिए और वहां आरटीटीआई प्रतीकों के बारे में कुछ जानकारी है जिसे हासिल करना है। (मैं nforti के साथ संकलित नहीं कर सकता तो निष्पादन योग्य शिकायत करता है कि rtti निश्चित रूप से iostreams का उपयोग करने के लिए सक्षम होना चाहिए)

उत्तर

8

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

जबकि जीडीबी को कभी-कभी समस्याएं मिलती हैं, इसमें कई चेतावनियां होती हैं क्योंकि जीडीबी डीबग प्रतीकों का उपभोग करता है, और उपभोक्ता (जीडीबी) में बग और डिफेंसेंसी होती है। अक्सर वे जीडीबी की कार्यक्षमता को कम करते हैं। इस मामले में डीबगर के अंदर उपलब्ध उस वर्ग के बारे में कम जानकारी है। यह डीबगिंग को और अधिक कठिन बनाता है, लेकिन एप्लिकेशन को खुद को चोट नहीं पहुंचाता है।

आपके पास इस त्रुटि के बारे में क्या करना है इसके लिए कई विकल्प हैं।

  1. जीडीबी में चेतावनी को अनदेखा करें और जीवन के साथ आगे बढ़ें।
  2. जीडीबी के लिए स्रोत प्राप्त करें और समस्या को खोजने का प्रयास करें और पैच सबमिट करें। मुझे यकीन है कि इसका स्वागत किया जाएगा।
  3. एक अलग डीबगर का उपयोग करें। (मैंने देखा है कि सभी विकल्प भुगतान उत्पादों हालांकि हैं।)
  4. किसी भी टेम्पलेट का उपयोग न करने के लिए प्रोग्राम को फिर से लिखें। जीडीबी टेम्पलेट हैंडलिंग वह जगह है जहां प्रतीक लुकअप के अधिकांश मुद्दे मौजूद हैं।
+0

आपके उत्तर के लिए धन्यवाद। मुझे पसंद 2 के साथ जाना पसंद है अगर केवल मेरे पास पर्याप्त समय था। वैसे भी मैं जीडीबी डेवलपर्स के साथ मेल खाऊंगा। हालांकि मुझे पसंद 4 नहीं मिलता है। मैंने अभी बूस्ट लाइब्रेरी का उपयोग किया है और मैं टेम्पलेट्स का उपयोग कैसे नहीं कर रहा हूं? – hAcKnRoCk

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