Posez votre question Signaler

[C++] initialiser les references [Résolu]

kiroukou 22Messages postés 16 janvier 2005Date d'inscription - Dernière réponse le 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
++
Lire la suite 

[C++] initialiser les references »

5 réponses
Réponse
+2
moins plus
Pour finir le travail, voici le lien vers le topic sur Développez.com :

http://www.developpez.net/...
Ajouter un commentaire
Réponse
+1
moins plus
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 =)
Ajouter un commentaire
Réponse
+1
moins plus
et c quoi le site ou il y a la réponse ?
Ajouter un commentaire
Réponse
+0
moins plus
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
++
Ajouter un commentaire
Réponse
+0
moins plus
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 !!!! =)))
Ajouter un commentaire
Ce document intitulé « [C++] initialiser les references » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook