我的课程有" 类型"方法和枚举类" 类型"在里面。我想把两个命名为"输入"。
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 ++解决这个问题?
答案 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()
,它与枚举名称冲突。