在我从一个类中声明一个对象,并尝试只为该对象设置一个变量后,为什么它说它没有声明类型?

拉拉朗尼

我正在为一个学校项目编写代码,该项目将用于具有安全性的 Chromebook 充电站。我现在遇到的问题是,当我在为用户分配一个 Chromebook 后检测 Chromebook 是否真的在插槽中时,我使用摇杆开关来模拟这一点,但是当我声明摇杆的引脚时,arduino verfier提出“'slot1' 没有命名类型”。代码如下:

    //class
     class Chromebook_slot {
      public:
        String Name = "";
        String RFID_tag = "";
        int rocker = 0;
        boolean chromebook_in = false;
    //class function to check if chromebook is in.
    //if not, redirect already to reassigning so chromebook slot is entered as open and free.
       void set_if_in()
       {
         int momen_1_state = digitalRead(momen_1);
         int momen_2_state = digitalRead(momen_2);

         // the button has been pushed down and the previous process has been completed
         // eg. servos would have been reset if there was a previous user
         if (momen_1_state == HIGH || momen_2_state == HIGH)
         {
           chromebook_in = digitalRead(this->rocker);
          if (chromebook_in == 0)
           {
            re_assigning();
           }

          else
          {
            return;
           }
         }

       }
    };


    //this is now outside the class..

    //class declarations
    Chromebook_slot slot1;
    Chromebook_slot slot2;

    //variables for rocker switches which will act for detecting chromebooks.
    // in my final version, this will replaced by a photoresistor and laser.

    slot1.rocker = 3;
    slot2.rocker = 2;

该函数re_assigning()是在代码中进一步声明的单独函数,只是将插槽重置为打开以供将来使用。

时间影像
slot1.rocker = 3;
slot2.rocker = 2;

这些语句不能位于 C++(或 .ino)文件的顶层。它们需要在函数内部。发生的事情是编译器正在slot1通过潜在有效构造的镜头查看标识符。它看到一个标识符,并且在以标识符开头的代码中,此时唯一可以合法存在的东西是一些声明,例如int a = 7;,或更抽象地some_type some_more_stuff所以它期望slot1是一种类型,它不是,因此是消息。

如果您希望在 Arduino 程序的早期进行这样的任务,您可以做的最简单的事情就是将它们放入setup()

void setup() {
  slot1.rocker = 3;
  slot2.rocker = 2;
  // ...
}

或者,您可以将这些部分作为Chromebook_slot的构造函数,以便它们可以在slot1andslot2的声明中给出:

class Chromebook_slot {
public:
    Chromebook_slot(int rocker_init_value) {
      rocker = rocker_init_value;
    }
// ...    

或者以一种不太熟悉但更合适的形式,使用构造函数的初始化列表:

class Chromebook_slot {
public:
    Chromebook_slot(int rocker_init_value) 
     : rocker(rocker_init_value) {}
// ...    

一旦你有了 的构造函数Chromebook_slot,你的变量就可以变成:

Chromebook_slot slot1(3);
Chromebook_slot slot2(2);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章