C++ 如何访问内部枚举类?
C++ How can I access to an inner enum class?
我在 c++ 中遇到了一个问题:
#include <iostream>
class Apple{
public:
int price = 100;
enum class color {
red =1, green, yellow
};
};
int main() {
Apple apple;
std::cout << Apple::color::green << std::endl;
}
当我尝试编译此代码时,出现以下消息:
[错误] "Apple::color"不是类或命名空间
- 看起来您使用的是 C++11 之前的编译器或未启用 c++11 标志。
-
使用正确的 c++11 标志后,您将不得不重载
operator <<
friend std::ostream& operator <<( std::ostream& os, const color& c ) { /* ... */ return os; }
-
启用
c++11
原因enum class
是 C++11 功能起诉 --std=c++11
编译器标志。 -
如果要
cout
Apple::color
,请重载<<
运算符
类似以下内容的内容应该有效:
#include <iostream>
class Apple {
public:
int price = 100;
enum class color { red = 1, green, yellow };
};
std::ostream& operator<<(std::ostream& os, const Apple::color& c) {
if (c == Apple::color::red) std::cout << "Redn";
if (c == Apple::color::green) std::cout << "Greenn";
if (c == Apple::color::yellow) std::cout << "Yellown";
return os;
}
int main() {
Apple apple;
std::cout << Apple::color::green << std::endl;
}
为了使用enum class
编译器必须支持C++11。例如,这可以通过在 clang 或 g++ build 命令(如果您正在使用这些命令(之后附加一个-std=c++11
来实现。新版本的Visual Studio会自动启用C++11。
正如@pvl所指出的,您应该得到的错误是no operator "<<
,因为enum class
不会隐式转换为任何内容,因此不会输出整数值。
P0W 的答案在这两个方面都是正确的,但如果您只想输出基础值,那么强制转换而不是重载插入运算符可能更简单。
using enum_type = std::underlying_type<Apple::color>::type;
enum_type value = (enum_type)Apple::color::green;
std::cout << value << 'n';
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- 如何在公共头文件中向库的用户公开枚举,同时在内部使用它?
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 在模板类内部定义的枚举上的嵌套类的部分专用化
- C++ 如何访问内部枚举类?
- c 如何从类类 .h 文件内部识别.cpp中的 UDT 枚举
- 访问在 C++ 函数内部的结构中定义的枚举类属性
- 在类内部的结构中定义枚举
- 枚举在内部作为整数实现.那为什么会给出错误
- C++:使用"enum class"的类内部的枚举
- 内部作用域枚举、哈希函数和无序集数据成员
- 在类外部使用在类内部声明的类型定义枚举
- 类不能包含内部定义枚举的操作符函数
- c++:在类内部从外部声明枚举器,以便可以在私有成员中使用
- 如何从内部枚举中获得外部类名
- 引用结构内部的枚举