首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用枚举时C++ 2003与C++ 2011代码不兼容的原因

引用枚举时C++ 2003与C++ 2011代码不兼容的原因
EN

Stack Overflow用户
提问于 2015-11-20 20:42:47
回答 1查看 74关注 0票数 0

我试图将作者使用C++ 2011编译的库(设置了-std=c++0x标志)合并到我自己的代码中,代码使用C++ 2003编译。值得庆幸的是,库中没有典型的C++ 2011关键字,比如auto。然而,当我尝试使用C++ 2003编译它时,有一个编译错误。

在这个头文件的第42、49和55行中定义了三个枚举:planner.h。在下面的片段中,它们是MetaSearchTypePlannerTypeMHAType

代码语言:javascript
复制
namespace mha_planner
{
  enum MetaSearchType
  {
    ROUND_ROBIN,
    META_A_STAR,
    DTS
  };

  enum PlannerType
  {
    IMHA,
    SMHA
  };

  enum MHAType
  {
    ORIGINAL,
    PLUS,
    FOCAL,
    UNCONSTRAINED,
    GBFS
  };
}

class MHAReplanParams: public ReplanParams
{
  public:
    MHAReplanParams(double allocated_time): ReplanParams(allocated_time)
  {
    inflation_eps = 1.0;
    anchor_eps = 1.0;
    use_anchor = true;
    meta_search_type = mha_planner::MetaSearchType::ROUND_ROBIN;
    planner_type = mha_planner::PlannerType::SMHA;
    mha_type = mha_planner::MHAType::PLUS;
  };
    double inflation_eps, anchor_eps;
    bool use_anchor;
    mha_planner::MetaSearchType meta_search_type;
    mha_planner::PlannerType planner_type;
    mha_planner::MHAType mha_type;
}; 

//other classes
}

然后,在类MHAReplanParams的构造函数中使用这些枚举,并在原始代码的第73、74和75行中使用相同的名称空间和文件。在C++ 2003下编译时,我遇到一个错误:mha_planner::MetaSearchType::ROUND_ROBIN is not a valid class or namespace reference。然而,在C++ 2011下编译并没有给出任何问题。我试着查找两个版本之间的一些“代码破坏”差异,但我找不到可能导致这种情况的任何东西。

注意:我试图坚持使用C++ 2003的原因是,我正在更广泛地使用针对2003年的其他更大的库,而且我听说,当您尝试将C++ 2011的代码与针对旧版本的代码混合时,有时会发生“不好的事情”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-20 23:55:34

我相信(但不是100%确定)在C++11之前,您不能使用枚举类型本身的名称作为限定符。

换句话说,mha_planner::MetaSearchType::ROUND_ROBIN在C++11中是允许的,但是在早期版本中,枚举值只是在封闭的名称空间范围内,所以您可以编写mha_planner::ROUND_ROBIN

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33835735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档