C++ では、Player オブジェクトへのポインターの配列があり、それを Fickle オブジェクトで埋めたいと考えています。Fickle は Player から派生したクラスです。これは、Player クラスから派生したさまざまなクラスのさまざまなオブジェクトで満たすことができる一般的な Player 配列が必要だからです。
これどうやってするの?
Player オブジェクトへのポインタの配列を作成します
Player ** playerArray;
次に、配列を特定のサイズに初期化します
playerArray = new Player *[numPlayersIn];
しかし、以下は何らかの理由で機能しません。
playerArray[i] = new Fickle(0);
playerArray を Fickle オブジェクト (Fickel は Player から派生したクラス) で埋めるにはどうすればよいですか?
ありがとう。
アップデート:
エラーメッセージが表示されます (Eclipse IDE で):
expected ';' before 'Fickle'
気まぐれの定義と関係があるのではないかと思います。
Fickle.hpp ファイルには次のものが含まれます。
#pragma once
#include "player.hpp";
class Fickle: public Player {
public:
// constructor
Fickle(int initChoice){
choice = initChoice;
}
}
これでいいですか、それとも問題がありますか?
Player クラスのヘッダー ファイルには次のものが含まれます。
class Player {
private:
public:
int getChoice();
int choice; // whether 0 or 1
virtual void receive(int otherChoice); // virtual means it can be overridden in subclases
};
receive メソッドは、Fickle および Player クラスから派生した他のクラスでオーバーライドされます。
更新 2:
OK、エラーは実際にはコードの別の部分によるものだと思います。
Player はメソッド receive を定義します:
virtual void receive(int otherChoice);
これは、サブクラス Fickle でオーバーライドする必要がありますが、Fickle での定義は次のとおりです。
void Fickle::receive(int otherChoice) {}
エラーが発生します:
no 'void Fickle::receive(int)' member function declared in class 'Fickle'
しかし、なぜこれがレシーブがPlayerクラスで定義されているためなのかわかりませんか?