C++ Arduino:向下转换后,子字段不引用原始地址



Arduino: C++

我有以下类:ChildOneChildTwo继承自ParentChildTwo具有特定于它的字段。

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";
};

我面临的问题是,当我创建一个父类型的数组并添加ChildOneChildTwo的元素时,我从数组中获取一个元素并尝试执行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);
....

串行监视器上打印的值分别不同于0ON(相反,我看到了有趣的 ASCII 字符)。它们指向不同的地址

我想知道我是否做错了什么。

我该怎么做才能实现我的目标?

注意:我相信dynamic_cast会起作用,但Arduino Uno的编译器不支持它。

‏‏‎ ‎ ‏‏‎ ‎ ‏‏‎ ‎ ‏‏‎ ‎ ‏‏‎ ‎


由于我大约 4 年前发布的问题,我被阻止再问任何问题。他们给我的唯一选择是更新我的旧问题(4 年前的问题,这似乎不对),我不再面临这些问题,评论/答案在更新后看起来与现在查看的人无关。😥

您缺少文件res/drawable/check_refresh.xml:这是报告的崩溃。它可能位于特定于版本的文件夹中:项目根目录的路径是什么?我希望您在 v21 文件夹中有一些可绘制对象或其他东西。

最新更新