Arduino: C++
我有以下类:ChildOne
和ChildTwo
继承自Parent
,ChildTwo
具有特定于它的字段。
const byte TYPE_1 = 0;
const byte TYPE_2 = 1;
const byte TYPE_3 = 2;
class Parent {
private:
byte type = TYPE_1;
public:
Parent(byte type) : type(type) {}
};
class ChildOne : public Parent {
public:
ChildOne() : Parent(TYPE_2) {}
};
class ChildTwo : public Parent {
public:
ChildTwo() : Parent(TYPE_3) {}
boolean isOn = false;
char* textOn = "ON";
char* textOff = "OFF";
};
我面临的问题是,当我创建一个父类型的数组并添加ChildOne
和ChildTwo
的元素时,我从数组中获取一个元素并尝试执行static_cast
,它成功了,但是当我打印特定于ChildTwo
的字段的值时,这些值是有趣的 ASCII 字符
例如
Parent menu[] = {ChildOne(), ChildTwo(), ChildOne()};
Parent item = menu[1];
if (item.type == TYPE_3) {
ChildTwo* child = static_cast<ChildTwo*>(&item);
...
}
类型转换后,当我打印对象中的字段值时child
:
...
Serial.print(child->isOn);
Serial.print(child->textOn);
....
串行监视器上打印的值分别不同于0和ON(相反,我看到了有趣的 ASCII 字符)。它们指向不同的地址
我想知道我是否做错了什么。
我该怎么做才能实现我的目标?
注意:我相信
dynamic_cast
会起作用,但Arduino Uno的编译器不支持它。
由于我大约 4 年前发布的问题,我被阻止再问任何问题。他们给我的唯一选择是更新我的旧问题(4 年前的问题,这似乎不对),我不再面临这些问题,评论/答案在更新后看起来与现在查看的人无关。😥
您缺少文件res/drawable/check_refresh.xml
:这是报告的崩溃。它可能位于特定于版本的文件夹中:项目根目录的路径是什么?我希望您在 v21 文件夹中有一些可绘制对象或其他东西。