weed | voilou je viens de regarder un peu partout et j'ai trouvé http://www-ic2.univ-lemans.fr/~del [...] sld005.htm
c'est exatement ce que je veux faire un conteneur d'objet hétérogéne sur une même classe de base commune (héritage) grhhh y a pas d'exemple sur ce site pour m'expliquer et j'ai pas trouvé gd chose sur google. les tuto portent tjrs sur des int, float ... dans mon main j'ai essayé ca avec t(barre_plate hérite de carré):
Code :
- main ()
- {
- vector<carre> t;
- t.push_back(new barre_plate (0.5,0.4,3,'v'));
- }
|
et j'obtiens ca comme erreur Error: main.cpp(130,48):Cannot initialize 'const carre &' with 'barre_plate * volatile'
Error: main.cpp(130,48):Type mismatch in parameter 'x' in call to 'std::vector<carre>::push_back(const carre & )'
je vois pas ou j'ai mis un const ms bon et j'ai essayé avec *t
Code :
- main ()
- {
- vector<carre> *t;
- t.push_back(new barre_plate (0.5,0.4,3,'v'));
- }
|
et j'obtiens comme erreur
Error: main.cpp(130,16):Structure required on left side of . or .*
je m'y connais pas trop justement ds les pointeurs ms normallement un new comme malloc fournie un espace memoire et renvoie l'adresse du permier élément de l'objet. Donc je ne sais pas trop comment cela se passe, lorsque l'on met un push_back qui n'attends pas une adresse normallement.
le constructeur barre_plate fonctionne bien ..
je n'ai pas de fonction virtuel pour le moment.
voici les prototypes si ca peut aider :
Code :
- class baton
- {
- private :
- char orientation;
- //std :: list<baton> coord;
- protected :
- float pas;
- float x, y;
- list<float> coordx, coordy;
- public :
- //constructeur d'initialisation x,y et le pas
- baton (float = 1.1, float = -10);
- //destructeur
- ~baton ();
- void chg_pas (float const & );
- void affiche2();
- void affiche();
- baton operator () (float const &, float const &, char = 'o');
- baton & operator = (const baton & );
- baton operator+= (float const & );
- baton operator* (float const & );
- baton operator+ (float const & );
- void chg_size (float const &nv) { pas=nv; }
- void affectation (list<float> &, list<float> & );
- void affectation_p (list<float> &, list<float> & );
-
- };
- class carre : public baton
- {
- private :
- static float unite;
- protected :
- bool actif;
- public :
- //constructeur
- carre(float=0, float=0);
- carre(float, float, bool);
- //constructeur par copie
- carre (const carre & );
- //void chg_unite (const float &t);
- carre& operator+= (const int & );
- carre& operator*= (const int & );
- carre& carre :: operator += (const carre & );
- carre carre :: operator + (const carre & );
- bool verif_position(list<float> & );
- bool fin_chute (list<float> & );
- bool move (char );
- };
- class barre_plate : public carre
- {
- private :
- char position;
- int longueur;
- void construction ();
- public :
- barre_plate ();
- barre_plate (float, float, int);
- barre_plate (float, float, int, char);
- };
|
Message édité par weed le 27-06-2003 à 22:58:36
|