2012-08-29 53 views
1

我試圖編譯一個使用Boost庫的Dalal and Triggs發佈的程序。由於作者使用的版本(1.35)與我正在使用的版本(1.46)之間的差異,我在Boost方法validation_error中出錯。如何將字符串傳遞給Boost 1.46中的「validation_error」方法?

old version,作者所使用的validation_error方法有以下結構:

validation_error(const std::string & what); 

而且我跑加速的version有以下幾點:

validation_error(kind_t kind, const std::string & option_value = "", 
       const std::string & option_name = ""); 

在代碼,作者將string傳遞給舊的validation_error方法(下面的示例)。

std::ostringstream ost; 
ost << "value " << *value 
     << " greater than max value " << max; 
throw po::validation_error(ost.str()); 

我怎樣才能通過這個stringvalidation_error新版本?

回答

2

你可以做類似

throw boost::program_options::validation_error(
    boost::program_options::validation_error::invalid_option_value, 
    "option name", 
    *value 
); 

throw boost::program_options::invalid_option_value(ost.str()); 
+0

是什麼'invalid_option_value'嗎?和'「選項名稱」? – Yamaneko

+1

您正在描述驗證錯誤,在1.35中唯一的選擇是給字符串與描述,什麼是錯的。在1.46中,您必須以更系統的方式描述問題:您告訴kind_t枚舉錯誤(請檢查http://www.boost.org/doc/libs/1_46_0/doc/html/boost/program_options/validation_error .html),還會傳遞錯誤的值和未經驗證的選項名稱。 – Greg

+0

我該如何傳遞'max'的值? – Yamaneko

相關問題