2012-08-29 54 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

相关问题