宏定义的优点不说了,比如:#defineCC_DISCRETE_BOOST "DAB" 则以下你用CC_DISCRETE_BOOST就可以代表 “DAB”,但是会出现下面的问题:
如程序需要输入参数,我的输入参数为: -bt CC_DISCRETE_BOOST
部分关键代码如下:
if( !prmName.compare("-bt" ) )
{
boost_type = !val.compare(CC_DISCRETE_BOOST ) ? CvBoost::DISCRETE :
!val.compare( CC_REAL_BOOST) ? CvBoost::REAL :
!val.compare(CC_LOGIT_BOOST ) ? CvBoost::LOGIT :
!val.compare(CC_GENTLE_BOOST ) ? CvBoost::GENTLE : -1;
if (boost_type == -1)
res = false;
}
(部分代码省略)
String boostTypeStr =boost_type == CvBoost::DISCRETE ? CC_DISCRETE_BOOST :
boost_type ==CvBoost::REAL ? CC_REAL_BOOST :
boost_type ==CvBoost::LOGIT ? CC_LOGIT_BOOST :
boost_type == CvBoost::GENTLE ?CC_GENTLE_BOOST : String();
CV_Assert(!boostTypeStr.empty() ); //CV_Assert()若括号中的表达式值为false,则返回一个错误信息
但是编译错误如下图:
意思就是boostType是空的。。想了半天怀疑是选择运算符结合问题我理解错了,,,后来发现不是。。又过了一阵才反应过来,我输入参数的问题,虽然程序中定义了
#defineCC_DISCRETE_BOOST "DAB",但是我输入的东西应该是变量实际的值即“DAB”,而不是CC_DISCRETE_BOOST ,修改后输入参数为-bt DAB,编译成功。