0

これは、この前の質問の問題 #2 です。

Arduinoコードの継承

スティーブンの答えに基づいて構築すると、ポインターを保持する配列がスコープ外に永続化する必要があり、奇妙な動作が発生します。

これは、これまでに持っている「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

ボード.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);

その結果、いくつかのナッツシリアルコードが書き出されます。

明らかに、ここのクラスの配列内のポインターのインとアウトを理解していません。

4

1 に答える 1

1

仮想にする必要がありActor::speakます。コンパイラは仮想メソッドに動的バインディングを使用します。

class Actor
{
  public:
    Actor();
    virtual void speak();  // virtual
  private:
};
于 2013-02-15T00:43:03.657 に答える