我正在为一个学校项目编写代码,该项目将用于具有安全性的 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
的构造函数,以便它们可以在slot1
andslot2
的声明中给出:
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] 删除。
我来说两句