Bonjour,
Les informations sont données avant le problème, se reporter ci-dessous pour celui-ci.
Je suis en train de faire un petit programme de bataille navale (histoire de me détendre) en C++. J'ai donc :
Code : C++class Grid
{
public:
//...
class Box
{
//...
};
protected:
Box ***m_grid;
//...
};
Ceci pour l'algorithmique, et son utilisation en 2D (SDL) grâce à :
Code : C++class Grid2D : public Grid
{
public:
//...
class Box2D : public Grid::Box
{
public:
explicit Box2D(const Coordinates &);
//...
Coordinates getCoordinates(void) const;
static void setDimensions(const Dimensions &);
static Dimensions getDimensions(void);
private:
static Dimensions dimensions;
const Coordinates m_coord;
};
//...
void draw(SDL_Surface *, const Coordinates & = Coordinates(0,0)) const;
};
En effet, les dimensions et coordonnées n'auraient pas lieu d'être pour des cases simples destinées à l'algorithmique...
Le tableau 'Box ***m_grid;' est alloué dynamiquement durant le constructeur de la classe de base Grid, seulement si une constante n'a pas été définie (l'étant dans le header contenant Grid2D, puisque Grid2D alloue plutôt des Box2D* dans son constructeur). Cependant, lorsque j'essaie de compiler, le constructeur de Grid2D est dénoncé par le compilateur comme hébergeant une erreur du type "invalid conversion from 'Grid2D::Box2D***' to 'Grid::Box***' ", avec -comme vous pouvez vous en douter- le code suivant :
Code : C++//...
m_grid = new Box2D**[gridDim.w];
for(size_t i = 0 ; i < gridDim.w ; i++)
{
m_grid[i] = new Box2D*[gridDim.h];
for(size_t j = 0 ; j < gridDim.h ; j++)
m_grid[i][j] = new Box2D(Coordinates(i*Box2D::getDimensions().w+1, j*Box2D::getDimensions().h+1));
}
Pourquoi, étant donné que selon la hiérarchie, un Box* peut être un Box2D* ?
Merci d'avance.
Edit: Suis-je bête

Il fallait tout simplement déclarer des tableaux de pointeurs de type Box... Correction :
Code : C++//...
m_grid = new Box**[gridDim.w]; //Modif' : Box2D -> Box
for(size_t i = 0 ; i < gridDim.w ; i++)
{
m_grid[i] = new Box*[gridDim.h]; //Modif' : Box2D -> Box
for(size_t j = 0 ; j < gridDim.h ; j++)
m_grid[i][j] = new Box2D(Coordinates(i*Box2D::getDimensions().w+1, j*Box2D::getDimensions().h+1));
}
Édité
le 02/06/2007 à 16:07:42
par
Mg++