【发布时间】:2013-02-14 20:07:05
【问题描述】:
我正在编写一些 Arduino 代码并尝试在某些类中使用继承。我有一个类“Actor”(我的基类)和一个类“Marble”(继承自 Actor)。以下是头文件:
演员.h:
#ifndef Actor_h
#define Actor_h
#include "Arduino.h"
class Actor
{
public:
Actor();
void speak();
private:
};
#endif
大理石.h:
#ifndef Marble_h
#define Marble_h
#include "Arduino.h"
#include "Actor.h"
class Marble : public Actor {
public:
Marble();
virtual void speak();
private:
};
#endif
演员.cpp:
#include "Arduino.h"
#include "Actor.h"
Actor::Actor()
{
}
void Actor::speak() {
Serial.println("Actor");
}
大理石.cpp:
#include "Arduino.h"
#include "Marble.h"
void Marble::speak() {
Serial.println("Marble");
}
最后,在我做的循环函数中:
void loop() {
Marble marble;
Actor children[2];
children[0] = marble;
children[0].speak();
这会导致“演员”被打印出来。
我发现这个不错的链接似乎与我的问题相似,但该解决方案似乎对我不起作用: http://arduino.cc/forum/index.php?topic=41884.0
所以。似乎当我创建我的“演员”数组并尝试将 Marble 粘贴在其中时,它会被投射到演员或类似的东西上。问题是,我将有几个不同的字符,它们都将继承自“Actor”,我想要一个数组来迭代并在它们上调用覆盖的方法。
那么,也许问题在于我是如何处理这个问题的,或者可能存在一些语法错误?我不知道!
感谢您的帮助, 凯文
【问题讨论】:
-
Actor中的speak方法不应该也标记为virtual吗? -
这里有两个错误,Philip 指出了缺少的
virtual,Steven 指出了您正在复制对象而不是通过指针引用它们的事实。您必须同时修复这两个问题才能使其正常工作。
标签: c++ inheritance arduino