[C++] initialiser les references

Résolu/Fermé
kiroukou Messages postés 22 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 8 novembre 2005 - 24 févr. 2005 à 14:33
 mathieuS - 9 sept. 2009 à 12:54
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
#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 :
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
++

5 réponses

Pour finir le travail, voici le lien vers le topic sur Développez.com :

https://www.developpez.net/forums/d27498/c-cpp/cpp/debuter/debutant-probleme-initialisation-references/
2
Tiens c'est marrant, ce post me dit qq chose...
c'est con, les copier/coller des posts de developpez.com ne marche pas avec les :roll: ;-) tu peux retourner voir ton post sur l'autre site, il y a des réponses =)
1
et c quoi le site ou il y a la réponse ?
1
kiroukou Messages postés 22 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 8 novembre 2005
24 févr. 2005 à 15:03
Oui en effet, et j'ai pas honte :)
A des forums différents correspond des gens differents et donc des reponses differentes :) Cela me permettrai de voir les diverses possibilitées :)

Merci de ta reponse dans tout les cas :D
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ah mais tu n'as pas avoir honte du tout! au contraire!
je suis pareil que toi : si je navigue entre les 2 forums, c'est que les 2 sont différents et très intéressants!

et comme tu dis, c'est dans la différence qu'on trouve la complémentarité et ce qui nous convient !

ET QUE VIVE LES FORUMS !!!! =)))
0