【发布时间】:2021-02-10 19:28:38
【问题描述】:
我正在创建一个类,我想在该类中创建一个枚举,以便只能通过该类的命名空间访问它。我希望用户能够像这样访问类之外的枚举:
GpioPin pin(23, GpioPin::OUTPUT);
其中 GpioPin 是类,OUTPUT 是枚举值之一。
我尝试将枚举放在类的顶部,并尝试将它放在公共标签下,例如(包含用于帮助调试的构造函数):
public:
enum pin_dir {
INPUT,
OUTPUT,
};
GpioPin(int pin_num, pin_dir dir): pin_num(pin_num), dir(dir) {
std::string dir_str;
if(dir == INPUT){
dir_str = "in";
} else if (dir == OUTPUT){
dir_str = "out";
} else {
std::cout << "invalid direction in constructor for pin " << pin_num << std::endl;
return;
}
init_gpio_pin(pin_num, dir_str.c_str());
}
但是当在公共标签下时,构造函数的行为就像枚举不存在并引发编译器错误。
有谁知道这样做的正确方法吗?
谢谢
编辑:问题已解决。此处描述的代码是正确的并且按预期工作。接受的答案提供了一些关于 C++ 中枚举类的好信息
【问题讨论】:
-
我们可以得到一个minimal reproducible example 的无效代码吗?另外,请包括完整的错误文本。释义经常会丢失有价值的信息。
-
确定我会在几秒钟内编辑它。错误文本很长,涉及很多不同的错误,这些错误都源于编译器认为枚举类型不存在的主要问题
-
如果操作系统是Linux,我建议使用
libgpiod。