c++ - 来自有限列表的 C++ 类构造函数参数
问题描述
我想知道使用 C++ 使类构造函数从有限列表中获取参数的最佳方法是什么。例如,如果我有一个名为 的类Colour
,那么构造函数只会接受Red
、Green
或Blue
并将值存储到私有变量中。然后我会有一个调用方法printColour
来打印变量。
目前,我已经能够让它工作:
#include <iostream>
using namespace std;
class MyClass
{
public:
typedef enum { A = 3, B = 7 } Options_t;
MyClass(Options_t);
void printVal(void);
private:
Options_t _val;
};
MyClass::MyClass(Options_t val)
{
_val = val;
}
void MyClass::printVal(void)
{
cout << _val << endl;
}
MyClass hi(MyClass::A);
int main(void)
{
hi.printVal();
return 0;
}
但是,::
访问类结构的符号似乎有点笨拙(我想编写一个 Arduino 库,因此可能是初学者需要使用构造函数/方法。
有没有更好的方法来做到这一点(也许用.
符号?)谢谢!
编辑:当我尝试使用MyClass x(2)
(int
而不是Options_t
) 进行编译时,出现此错误:
class_enums.cpp:24:9: error: no matching constructor for initialization of 'MyClass'
MyClass hi(2);
^ ~
class_enums.cpp:4:7: note: candidate constructor (the implicit copy constructor) not viable: no known
conversion from 'int' to 'const MyClass' for 1st argument
class MyClass
^
class_enums.cpp:14:10: note: candidate constructor not viable: no known conversion from 'int' to
'MyClass::Options_t' for 1st argument
MyClass::MyClass(Options_t val)
^
所以看来我不能只使用 int 作为参数?
解决方案
如果您只是在创建 hi 期间想要这个,那么您可以这样做
MyClass hi(hi.A);
但是,在您的类中,您必须使用命名空间访问器::
。这.
是访问实例的成员,而不是实际的类内容。
他们可能在这里解释得更好:我什么时候使用点、箭头或双冒号来引用 C++ 中的类的成员?在这里:“::”“。”有什么区别?和 C++ 中的“->”
推荐阅读
- typescript - Next.js typescript 使用 babel-plugin-module-resolver 导入别名
- reactjs - 我可以在没有绑定的情况下使用调度吗?
- shell - 带有许多反斜杠的回声行为
- python - 将日期时间格式从破折号更改为斜杠
- javascript - Typescript Reduce 返回错误的类型
- python - 在本地主机上运行烧瓶服务器错误连接被拒绝
- python - 为什么我的使用 smtplib 发送电子邮件的机器人不起作用?
- subtype - 是 (A -> B) /\ (C -> D) <: (A /\ C) -> (B /\ D)?
- c - 为什么在 C 中存在分段错误?
- c++ - 如何使用 VS Code 将新包包含到路径中?