Si. Tu melanges pointeurs et references. Rassure toi c'est normal au debut, c'est pas evident.
Sans te faire un cours (tu peux faire des recherches la dessus sur le net si ca t'interesse) :
Ton operateur
inline Coord2D operator=(const Coord2D& c)
prend une référence en parametre. C'est quoi ? Ben dis toi qu'une reference, c'est exactement comme un objet pour faire plus simple.
Or toi quand tu appeles :
FuelPos[0].operator =(new Coord2D());
, l'operateur new te retourne un pointeur, c'est a dire l' adresse d'un objet, alors que ton operateur veut l'objet lui meme. Tu saisis la nuance ?
Bon comment faire ? Et bien c'est simple, soit tu fais un operateur = qui prend des Coord2D* en parametre au lieu des Coord2D&, et qui recopie les champs comme il faut, sois tu utilises * pour dereferencer le pointeur obtenu avec new. C'est du chinois non ?
Un peu de code pour expliquer tout ca :
myClass.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include "myClass.h"
myClass::myClass()
{
toto='a';
}
myClass::myClass(const myClass& c) {
toto=c.toto;
}
myClass::myClass(const myClass* c) {
toto=c->toto;
}
! |
myClass.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#ifndef MY_CLASS_H
#define MY_CLASS_H
class myClass {
public :
char toto;
myClass();
myClass(const myClass& c);
myClass(const myClass* c);
} ;
#endif // MY_CLASS_H |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <cstdlib>
#include <iostream>
#include "myClass.h"
using namespace std;
int main(int argc, char *argv[])
{
myClass* myClassPtr=new myClass;
myClass* myClassPtr2=new myClass;
myClass myClassInstance=*myClassPtr;
myClass myClassInstance2=myClassPtr2;
cout << myClassInstance.toto << endl;
cout << myClassInstance2.toto << endl;
delete myClassPtr;
delete myClassPtr2;
system("PAUSE");
return EXIT_SUCCESS;
} |
La ligne
myClass myClassInstance=*myClassPtr;
appelle
myClass(const myClass& c);
car *myClassPTr, represente la valeur pointee par myClassPtr
La ligne
myClass myClassInstance2=myClassPtr2;
, elle, appelle
myClass(const myClass* c);
car myClassPtr2, represente un pointeur !!
C'est subtil, mais super important comme nuance.
Enfin dernier truc :
Ne fais jammais myClassInstance=new myClass;
En effet, tout new doit etre associe a un delete . C'est une regle fondamentale. Quand tu fais un new, tu crees un objet, qui occupe de la memoire. Il te faut donc liberer toi meme cette memoire, sous peine d'avoir des memory leaks. Bon si tu comprends pas, accepte ca comme une regle fondamentale, un new = un delete.
Or pour faire delete, il te faut avoir quelque chose a deleter.
OK :
1 2 3
| myClass a=new myClass;
myClass b=a;
delete a; |
pas OK :
1 2 3
|
myClass b=new myClass;
delete ???; |
Dans le 2eme cas je delete quoi ????
BOn voila, j'ai fait ma bonne action de la journée. En espererant t'avoir aide
Un solution plus simple sinon : programme en Java
Bonne chance
Partager