关闭

宏定义后注意细节

标签: C++
860人阅读 评论(0) 收藏 举报
分类:

宏定义的优点不说了,比如:#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,编译成功。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:163602次
    • 积分:2334
    • 等级:
    • 排名:第16734名
    • 原创:55篇
    • 转载:78篇
    • 译文:0篇
    • 评论:25条
    文章分类
    最新评论