[Debutant] Probleme initialisation de references
Bonjour à tous,
Voila j'avance doucement avec le C++ mais il y a des choses qui m'échappent encore ;)
Je vous joins ma classe, j'ai mis des commentaires là où il y a des problèmes.
D'autres fichiers sont nécéssaires pour compiler, mais je pense que mon probleme est tellement simple que vous n'aurez pas besoin de tester, en regardant ca devrai vous suffir :D
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//Classe abstraite qui servira de base pour tous les autres objets du projet
class Basic
{
public :
CompilManager& _rManager;
Basic& _rFils;
Basic& _rParent;
Basic& _rSuivant;
int _id;
//Constructeurs
Basic(CompilManager&, Basic&, Basic&, Basic&);
Basic(CompilManager&);
//Constructeur de copie
Basic(const Basic& b)
: _rManager (b._rManager) ,
_rParent (b._rParent) ,
_rSuivant (b._rSuivant) ,
_rFils (b._rFils)
{
_id = b._id; //On peut pas mettre getId car le parametre est en const!! A se souvenir
}
// DESTRUCTEUR
inline ~Basic(){ std::cout << "Basic detruit" << std::endl; }
//Methode virtuelle pure , qui fait de cette classe une classe abstraite
virtual string convertASM(void) = 0;
//Getters
Register& getFreeRegister(const int) const;
Basic& getNext(void) const;
Basic& getParent(void) const;
Basic& getChild(void) const;
CompilManager& getManager(void) const;
int getId(void) const;
//setters
void setNext(Basic&);
void setChild(Basic&);
void setParent(Basic&);
void setManager(CompilManager&);
//Ne ps oublier ce *!&$ù*" de point virgule a la fin !!
};
Basic::Basic(CompilManager& manager)
://Initialisation des references => erreurs comme quoi les autre references ne sont pas initialisées pourquoi et comment??
_rManager(manager)
{
_id = _rManager.getId();
cout << "Basic instancie" << _id << endl;
}
Basic::Basic(CompilManager& manager,Basic& parent, Basic& suivant, Basic& fils)
://Initialisation des references
_rManager(manager) ,
_rParent(parent) ,
_rSuivant(suivant) ,
_rFils(fils)
{
_id = _rManager.getId();
cout << "Basic instancie" << _id << endl;
}
Register& Basic::getFreeRegister(const int type ) const
{
Register r;
return r; //Warning ici mais c'est normal, c'est juste un code temporaire
/*
if( _rManager.getRegisterManager().getFreeRegister(type, r) == false )
{
cout << "Basic.getFreeRegister / Impossible d'avoir un registre de libre "<<endl;
}
return r;
*/
}
Basic& Basic::getNext(void) const
{
return _rSuivant;
}
Basic& Basic::getParent(void) const
{
return _rParent;
}
Basic& Basic::getChild(void) const
{
return _rFils;
}
CompilManager& Basic::getManager(void) const
{
return _rManager;
}
int Basic::getId(void) const
{
return _id;
}
void Basic::setNext(Basic& b)
{
_rSuivant = b; // Le compilo semble détester cette synthaxe .... Pourquoi?
}
void Basic::setChild(Basic& b)
{
_rFils = b;
}
void Basic::setParent(Basic& b)
{
_rParent = b;
}
void Basic::setManager(CompilManager& c)
{
_rManager = c;
} |
Pour faciliter votre réponse voila ce que me sort le compilo chez moi :
Citation:
In file included from main.cpp:14:
classes/Basic/Basic.h: In constructor `Basic::Basic(CompilManager&)':
classes/Basic/Basic.h:53: error: uninitialized reference member `Basic::_rFils'
classes/Basic/Basic.h:53: error: uninitialized reference member `Basic::_rParent'
classes/Basic/Basic.h:53: error: uninitialized reference member `Basic::_rSuivant'
classes/Basic/Basic.h: In member function `Register& Basic::getFreeRegister(int) const':
classes/Basic/Basic.h:73: warning: reference to local variable `r' returned
classes/Basic/Basic.h: In member function `Basic& Basic::operator=(const Basic&)':
classes/Basic/Basic.h:109: error: non-static reference member `CompilManager&Basic::_rManager', can't use default assignment operator
classes/Basic/Basic.h:109: error: non-static reference member `Basic&Basic::_rFils', can't use default assignment operator
classes/Basic/Basic.h:109: error: non-static reference member `Basic&Basic::_rParent', can't use default assignment operator
classes/Basic/Basic.h:109: error: non-static reference member `Basic&Basic::_rSuivant', can't use default assignment operator
Je precise que j'ai regardé sur le forum et dans la FAQ sans succés. J'espère ne pas avoir mal regardé.. :roll:
En vous remerciant
++