我从class 声明了一个对象,并尝试只为该对象设置一个变量,为什么它说它没有声明类型?
After I declare an object from a class, and try to set a variable to that object inly, why does it say that it does not declare a type?
我正在为一个学校项目编写代码,该项目将用于具有安全性的 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
和 slot2
的声明中给出:
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);
我正在为一个学校项目编写代码,该项目将用于具有安全性的 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
和 slot2
的声明中给出:
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);