9

मैं इस पृष्ठ पर उदाहरण निम्नलिखित कोशिश कर रहा हूँ:बूस्ट :: error_info सही तरीके से उपयोग कैसे करें?

http://www.boost.org/doc/libs/1_40_0/libs/exception/doc/motivation.html

मिनट मैं निम्न पंक्ति का प्रयास करें:

error C2440: '<function-style-cast>' : cannot convert from 'int' to 'errno_code' 

:

throw file_read_error() << errno_code(errno); 

मैं कोई त्रुटि मिलती है मैं इससे कैसे काम लूं??

आदर्श रूप में मैं कुछ इस तरह बनाना चाहते हैं:

typedef boost::error_info<struct tag_HRESULTErrorInfo, HRESULT> HRESULTErrorInfo; 

लेकिन मैं भी पहले उदाहरण काम करने के लिए नहीं मिल सकता है।

संपादित करें: यहाँ क्या मेरे लिए त्रुटि C2440 उत्पन्न करता है की एक संक्षिप्त उदाहरण है:

struct exception_base: virtual std::exception, virtual boost::exception { }; 
struct io_error: virtual exception_base { }; 
struct file_read_error: virtual io_error { }; 

typedef boost::error_info<struct tag_errno_code,int> errno_code; 

void foo() 
{ 
    // error C2440: '<function-style-cast>' : cannot convert from 'int' to 'errno_code' 
    throw file_read_error() << errno_code(errno); 
} 
+0

क्या आप एक पूर्ण न्यूनतम उदाहरण पोस्ट कर सकते हैं जिसे आप C2440 त्रुटि प्राप्त करते समय संकलित करने का प्रयास कर रहे हैं? –

+0

लिंक पर उदाहरण देखें। मैं 'throw file_open_error() फेंक नहीं सकता << errno_code (errno); 'काम करने के लिए। –

+0

एक उदाहरण जोड़ा गया। –

उत्तर

6

Sam Miller ने मुझे समस्या के बारे में एक संकेत दिया। मैं तो बस शामिल करने के लिए की जरूरत:

#include <boost/exception/all.hpp>

अपने जवाब के लिए धन्यवाद।

+7

क्यों सही जवाब नीचे दिया गया है ?? वह # शामिल है जो मैंने ऊपर पोस्ट किया है कोड को ठीक करता है। –

+0

टेम्पलेट से संबंधित त्रुटि का एक उदाहरण जिसके लिए संकलक त्रुटि संदेश समस्या के कारण से पूरी तरह से असंबंधित है। इसके लिए धन्यवाद। –

13
#include <boost/exception/all.hpp> 

#include <boost/throw_exception.hpp> 

#include <iostream> 
#include <stdexcept> 
#include <string> 

typedef boost::error_info<struct my_tag,std::string> my_tag_error_info; 

int 
main() 
{ 
    try { 
     boost::throw_exception(
       boost::enable_error_info(std::runtime_error("some error")) 
       << my_tag_error_info("my extra info") 
       ); 
    } catch (const std::exception& e) { 
     std::cerr << e.what() << std::endl; 
     if (std::string const * extra = boost::get_error_info<my_tag_error_info>(e)) { 
      std::cout << *extra << std::endl; 
     } 
    } 
} 

पैदा करता

[email protected]> ./a.out 
some error 
my extra info 
2

कोशिश:

#include <boost/exception/error_info.hpp> 
#include <errno.h> 

throw file_read_error() << boost::errinfo_errno(errno); 

भी बेहतर :

BOOST_THROW_EXCEPTION(file_read_error() << errinfo_errno(errno)); 

आपका HRESULTErrorInfo उदाहरण सही लगता है।

+0

उदाहरण के लिए धन्यवाद, मेरे पास << BOOST_THROW_EXCEPTION() के बाहर था। –

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