在类外部使用在类内部声明的类型定义枚举
Using a typedef enum outside of a class that was declared inside the class
在c++中,我有这样的东西:
namespace myNS
{
class A
{
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
}
我想访问这个typedef,可能是这样的:
namespace myNS
{
struct ASettings
{
myNS::A::A_ENUMS myASetting;
}
}
但是我得到一个错误,A没有声明类型。如有任何帮助,不胜感激。
UPDATE:谢谢你的建议和帮助。经过建议,我更新了代码。我忽略了一个事实,即这里也涉及到一个名称空间。
您的typedef/enum声明是私有的。把它设为公共,你就可以从类外访问它了。
class A {
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
在c++类中,默认的访问是private,所以你的类型不能从结构体中访问。使用
class A
{
public:
typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};
然而,c++不是C,你不需要像C中通常使用的那样使用类型定义。
class A
{
public:
enum A_ENUMS { NONE, ALL };
};
如果没有不必要的元素,它的效果是一样的
你犯了两个错误:
- typdef != typedef(错误输入)
- 你忘记了类的可见性
修改后的代码:
class A
{
public:
typedef enum { NONE, ALL } A_ENUMS;
};
struct ASettings
{
A::A_ENUMS myASetting;
};
int
main()
{
}
如果你有正常的c++ 11支持,那么你可以用类作用域重写枚举,像这样:
typedef enum class A
{
NONE, ALL
} A;
欢呼。
参见上面的"更新"部分。需要包含命名空间
相关文章:
- 在有符号基础类型枚举的位域上溢出
- 在编译时将强类型枚举器转换为其基础类型?
- 如果 int 是"not within the enums range",为什么将 int 转换为强类型枚举会编译?
- 类型枚举的变量不是类型名称
- 强类型枚举的语法实现错误
- 枚举与强类型枚举
- 错误:T没有命名类型-用于使用强类型枚举的专门化
- 如何使用强类型枚举
- QT:将强类型枚举参数传递到插槽
- 在类定义中声明类型(枚举、结构等)会增加代码大小
- Visual Studio 11 (beta) 中的强类型枚举类
- 使用强类型枚举对类型和子类型进行建模
- 不允许将强类型枚举用作同一基础类型的参数
- 如何正确使用C++强类型枚举
- 带有强类型枚举的模板参数推导
- 是否可以在googleprotobuf中为类型(枚举或消息)定义一个别名
- C++中默认初始化的全局强类型枚举是什么
- std::is_signed不适用于强类型枚举:int
- 如何定义自定义值的类型?(枚举类型定义)
- 将强类型枚举传递给函数