【问题标题】:Arduino: Inheritance and arrays of pointer subclassesArduino:指针子类的继承和数组
【发布时间】:2013-02-15 00:26:25
【问题描述】:

这是上一个问题中的问题 #2:

Inheritance in Arduino Code

根据 Steven 的回答,我确实需要保存指针的数组在其范围之外持续存在,这会导致一些奇怪的行为。

这是我目前拥有的“Board”类,它包含多个子元素:

Board.h:

#ifndef Board_h
#define Board_h

#include <StandardCplusplus.h>
#include <serstream>
#include <string>
#include <vector>
#include <iterator>

#include "Arduino.h"
#include "Marble.h"
#include "Wall.h"

class Board
{
  public:
    Board();
    void draw(double* matrix);
  private:
    Marble marble;
    //std::vector<Actor> children;
    Actor* children[2];

};
#endif

Board.cpp:

#include "Arduino.h"
#include "Board.h"
#include <math.h>

#include <iterator>
#include <vector>

Board::Board()
{

}

void Board::create(double* _matrix, int _cols, int _rows) {

  Marble *marble = new Marble();
  Wall wall;
  children[0] = marble; 

  //children.push_back(marble);
  //children.push_back(wall);


}


void Board::draw(double* matrix) {
  Serial.println("board draw");
  children[0]->speak();  
}

在我正在调用的“循环”函数中

board.draw(matrix);

这会导致写出一些疯狂的串行代码。

显然我不了解这里类中数组中指针的来龙去脉。

【问题讨论】:

  • 在您的loop 函数中matrix 是什么??
  • MarbleActor 的子类吗?是Marble::speakvirtual?是Actor::speakvirtual?如果这三个答案都是肯定的,那么您的代码应该可以工作。

标签: c++ inheritance arduino


【解决方案1】:

你需要将Actor::speak设为虚拟,编译器对虚拟方法使用动态绑定。

class Actor
{
  public:
    Actor();
    virtual void speak();  // virtual
  private:
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多