我有一个类,其中有一个“类型”方法和一个枚举类“类型”。我想将两者都命名为“ 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] 删除。
我来说两句