Rechercher : dans
Par :

[C++] initialiser les references

Dernière réponse le 9 sep 2009 à 12:54:03 kiroukou, le 24 fév 2005 à 14:33:54 
 Signaler ce message aux modérateurs

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
++

Meilleures réponses pour « [C++] initialiser les references » dans :
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Les bases pour référencer votre site professionnel facilement VoirLes bases pour référencer son site professionnel facilement Avoir un site Internet c'est bien mais faire en sorte qu'il attire un grand nombre de visiteurs c'est indispensable ! En effet, le Web abrite une quantité colossale de contenus et sortir...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...

1

Desty Nov@, le 24 fév 2005 à 14:57:25

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 =)

Répondre à Desty Nov@

2

kiroukou, le 24 fév 2005 à 15:03:42

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
++

Répondre à kiroukou

3

Desty Nov@, le 24 fév 2005 à 15:27:13

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 !!!! =)))

Répondre à Desty Nov@

4

splotch, le 1 nov 2008 à 19:49:24

Et c quoi le site ou il y a la réponse ?

Répondre à splotch

5

 mathieuS, le 9 sep 2009 à 12:54:03

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

http://www.developpez.net/...

Répondre à mathieuS