如何在类构造后定义用户输入的常量值

时间:2018-01-03 14:48:44

标签: c++ constructor const

作为个人Arduino项目的一部分,我添加了一个初始"输入"阶段,要求用户输入一个整数,表示其旋转木马中的样品瓶数量(该特定信息与问题无关,我只是想我最好提及它。)此输入通过LCD按钮键盘接收。

此整数将仅用于名为Vial_Control的自定义类。

目前,如果我使用16小瓶系统,我会硬编码" 16"并使用' #define'整个指令(' const int'也可以,但不能解决问题。)

问题是,当我要求用户输入时,我已经在主文件中创建了我的全局变量,表示Vial_Control的类构造函数对象。

#ifndef Vial_Control_h
#define Vial_Control_h
#include "Arduino.h"

class Vial_Control
{
    public:
        Vial_Control();   // constructor
        void setSystemVialCount(int vialCount);
        // bunch of other unrelated functions
    private:
        #define VIAL_COUNT 16         // I used to use this
        static const int VIAL_COUNT;  // now I use this
        // bunch of other...

};

#endif

现在在我的实施文件中

Vial_Control::Vial_Control()
{
    // I used to assign 'static const int VIAL_COUNT' here
    // but turned away from that.

    // bunch of other...
}

void Vial_Control::setSystemVialCount(int vialCount)
{
    /* I started to do this, even prior to defining the variable
     * as 'static'.  I added 'static' as per suggestion from the
     * compiler, although I'm not entirely convinced that this is
     * the best solution. */
    VIAL_COUNT = vialCount;
}

因此,在我的ArdProj.c文件中,创建了Vial_Control构造函数,然后在初始阶段(Arduino调用此setup())我请求用户输入,然后调用函数setSystemVialCount(int vialCount),传入输入。

这是我之后的最佳解决方案吗? static const int VIAL_COUNT是否会保持价值" 16"对于整个运行时间?

当我没有添加static时,我收到了错误,因为我没有在构建时初始化变量。

如果有什么不清楚,请告诉我,我会添加更多。

谢谢, 安东尼

1 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。

是否有任何方法可以从硬件(样品瓶转盘)获取信息,设备可以通过该硬件告诉您它是否为16个样品瓶系统?如果是这样,那么你可以在你的ctor中使用它,并且可以在那里设置VIAL_COUNT。例如:

Vial_Control::Vial_Control(int nVials=16): vialCount(nVials)
{
}

以这种方式,const成员可以在创建时使用其初始值进行初始化。据我了解您正在做什么,用户输入为您提供正在使用的样品瓶数量,成员const int vialCount是机器上可用的最大样品瓶数。 (?)