2013-02-15 33 views
0

這是問題#2從這個前面的問題:的Arduino:指針子類繼承和數組

Inheritance in Arduino Code

大廈關閉史蒂芬的回答,我確實需要保存的指針之外堅持的陣列其範圍,這導致了一些奇怪的行爲。

這是我的 「局」 級我到目前爲止,包含多個子元素:

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); 

這導致一些堅果串行代碼被寫出。

很明顯,我不瞭解指針在數組中的指針的來龍去脈。

+0

你的循環函數什麼是矩陣? – 2013-02-15 00:29:15

+0

「大理石」是「演員」的一個子類嗎?大理石::說'虛擬'嗎? '演員::說'虛擬'嗎?如果三個答案都是肯定的,你的代碼應該可以工作。 – congusbongus 2013-02-15 00:31:40

回答

1

你需要虛擬Actor::speak,編譯器使用虛擬方法的動態綁定。

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