首页 > 解决方案 > 来自有限列表的 C++ 类构造函数参数

问题描述

我想知道使用 C++ 使类构造函数从有限列表中获取参数的最佳方法是什么。例如,如果我有一个名为 的类Colour,那么构造函数只会接受RedGreenBlue并将值存储到私有变量中。然后我会有一个调用方法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 作为参数?

标签: c++

解决方案


如果您只是在创建 hi 期间想要这个,那么您可以这样做

MyClass hi(hi.A);

但是,在您的类中,您必须使用命名空间访问器::。这.是访问实例的成员,而不是实际的类内容。

他们可能在这里解释得更好:我什么时候使用点、箭头或双冒号来引用 C++ 中的类的成员?在这里:“::”“。”有什么区别?和 C++ 中的“->”


推荐阅读