C ++方法名称和枚举类名称冲突

克里斯XJ朱

我有一个类,其中有一个“类型”方法和一个枚举类“类型”。我想将两者都命名为“ type”。

class proxy {
public:
    enum class type { direct, http };
    enum type type() const { return type_; }
private:
    enum type type_ = type::direct;
};

编译时,出现以下错误:

 error: ‘type’ is not a class, namespace, or enumeration
 enum type type_ = type::direct;

我知道那是因为我的类型方法隐藏了枚举类类型。是否可以在C ++中解决此问题?

米莉·史密斯

对于VS 2015,这为我编译:

class proxy {
public:
    enum class type { direct, http };
    enum class type type() const { return type_; }
private:
    enum class type type_ = type::direct;
};

您只需在其中添加“ class”关键字,因为它是作用域枚举。

VS的用法:

proxy p;
enum class proxy::type var = p.type();

您的原始解决方案针对gcc 6.3和clang 3.9.1进行编译:

class proxy {
public:
    enum class type { direct, http };
    enum type type() const { return type_; }
private:
    enum type type_ = type::direct;
};

clang和gcc的用法:

proxy p;
enum proxy::type var = p.type();

对于gcc 5.4,您可以在类的私有部分中输入def枚举。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章