En C++ j'ai un tableau de pointeurs vers des objets Player et je veux le remplir avec des objets Fickle où Fickle est une classe dérivée de Player. C'est parce que je veux un tableau Player général que je peux remplir avec différents objets de différentes classes qui sont tous dérivés de la classe Player.C++ fill array avec des objets dérivés du type de tableau
Comment est-ce que je peux faire ceci?
je crée un tableau de pointeurs vers des objets Joueur
Player ** playerArray;
initialize ensuite le tableau à une certaine taille
playerArray = new Player *[numPlayersIn];
Mais ce qui suit ne fonctionne pas pour une raison:
playerArray[i] = new Fickle(0);
Comment remplir le playerArray avec des objets Fickle (Fickel est une classe dérivée de Player)?
Merci.
MISE À JOUR:
Je reçois le message d'erreur (en IDE Eclipse):
expected ';' before 'Fickle'
Je pense qu'il pourrait être quelque chose à voir avec la définition de Fickle.
Le fichier Fickle.hpp contient:
#pragma once
#include "player.hpp";
class Fickle: public Player {
public:
// constructor
Fickle(int initChoice){
choice = initChoice;
}
}
Est-ce OK ou est-il un problème avec cela?
Le fichier d'en-tête de la classe du joueur a:
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
};
La méthode receive substituera dans Fickle et d'autres classes dérivées de la classe du joueur
MISE À JOUR 2:
OK Je pense que l'erreur est en fait due à une partie différente du code.
joueur définit une méthode receive:
virtual void receive(int otherChoice);
qui devrait être remplacée par la sous-classe Fickle, mais la définition dans Fickle:
void Fickle::receive(int otherChoice) {}
donne l'erreur:
no 'void Fickle::receive(int)' member function declared in class 'Fickle'
Mais Je ne sais pas pourquoi c'est parce que recevoir est défini dans la classe Player?
Quelle erreur obtenez-vous? Quelle est la définition de Fickle (première ligne avec les classes de base)? – ybungalobill
Quelle que soit la raison pour laquelle vous n'utilisez pas 'std :: vector'? 'std :: vector' est assez simple. Encore mieux (puisque vous devez gérer ces pointeurs) serait ['boost :: ptr_vector '] (http://www.boost.org/doc/libs/1_44_0/libs/ptr_container/doc/ptr_vector.html) ou 'std :: vector >'. –
GManNickG
Que voulez-vous dire, "ne fonctionne pas"? En ce qui concerne les types de pointeurs, cela fonctionne, donc il doit y avoir une erreur ailleurs dans votre code. Est-ce que 'Fickle' a le constructeur requis? Est-ce que '0 <= i