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

时间:2017-03-05 08:21:50

标签: c++

我的课程有" 类型"方法和枚举类" 类型"在里面。我想把两个命名为"输入"。

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 ++解决这个问题?

2 个答案:

答案 0 :(得分:2)

对于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,您可以在类的私有部分中键入enn enum。

答案 1 :(得分:1)

尝试:

class proxy {
public:
    enum class type { direct, http };
    type getType() const { return type_; }
private:
    type type_ = type::direct;
};
  • enum type替换为type,在C ++中使用枚举类型时不需要enum
  • 重命名函数type(),它与枚举名称冲突。