Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > Invalid conversions dans hiérarchie de classes > Lecture du sujet

Invalid conversions dans hiérarchie de classes

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Mg++ # Posté le 02/06/2007 à 15:40:33
Anciennement Kidpaddle2
Avatar
Groupe : Membres
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++

Image utilisateur
Image utilisateur
Mon tuto sur l'API Windows ; "globalement fini", car :
___________| Image utilisateur |_____________
 

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 221 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0218s (0.0069s)