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:
	
	| 12
 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
	
	| 12
 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
	
	| 12
 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 :
 
	
	| 12
 3
 
 |  myClass a=new myClass;
myClass b=a;
delete a; | 
 pas OK :
 
	
	| 12
 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