IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

comment surcharger l'opérateur << pour une classe qui pointe vers une autre classe


Sujet :

C++

  1. #1
    Débutant Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Points : 154
    Points
    154
    Par défaut comment surcharger l'opérateur << pour une classe qui pointe vers une autre classe
    Bonjour ,
    voici le bout du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class Case {
    private:
    	int x ; //ligne
    	int y ; //colonne
    	char etiq ; // etiquette pour savoir si c'est un pion P ou vide '_'
    	
    public:
    		// getters et setters 
    	int getX()const {return x;}
    	int getY()const {return y;}
    	void setX(int a){x = a;}
    	void setY(int b){y=b;}
    	void setEtiq(char C){etiq = C;}
    	char getEtiq()const{return etiq;}
    	
    	// constructeur 
    	Case();
    	Case(const Case& C); // constructeur par recopie je ne sais pas si la déclaration est bonne 
    		Case(int lig,int col,char etiqette);
    	~Case();
    	void Afficher();
    	ostream &operator<<(Case B); // surcharge de l'operateur << afin d'afficher une case
    	ostream &operator<<(Case* B); // on surcharge pour pouvoir afficher un pointeur sur Case 
    	
    	};
    
    ostream &operator<<(ostream &out, Case B){
    					
    									
    					out << "ligne= "<<B.getX() <<" "<<"colonne= " << B.getY() <<" "<<"etiquette= "<<B.getEtiq()<< endl;
    					return out ;
    					}
    
    			ostream &operator<<(ostream &out, Case* B){
    					
    									
    					out << "ligne= "<<B->getX() <<" "<<"colonne= " << B->getY() <<" "<<"etiquette= "<<B->getEtiq()<< endl;
    					return out ;
    					}
    
    				void Case::Afficher(){
    					
    					cout << "renseignement sur cette case" << *this << endl ;
    					}
    
    Case::~Case(){}
    			
    			// Class Piece 
    			
    			
    	
    class Piece {
    private:
    	Case* place; // je pensais qu'une pièce pointe sur une case 
    		
    public:
    	Piece();
    	~Piece();
    	Case* getPiece(){return place;}
    	void setPiece( Case& B1){place = &B1;}
         void Deplacer(int ligne , int colonne); // pour pouvoir le déplacer 
         void DeplacerCase(Case& B); // délacement à partir d'une case 
    	void Afficher1();
    	ostream &operator<<(Piece B) ;
    				
    	
    	};
    
    void Piece::Afficher1(){
    					
    	cout << "renseignement sur cette pièce " << *this << endl ; //ici il y a une erreur 
    					
    				}
    
    ostream &operator<<(ostream &out, Piece B){
    					
    									
    		out << "ligne= "<<(B.getPiece())->Afficher() << endl;
    					return out ;
    					}
    l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    1> : error C2679: '<<' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'void' (ou il n'existe pas de conversion acceptable)
    main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Case P1;
    P1.Afficher(); // çà marche 
     
    Case P2(2,3,'C');
    P2.Afficher(); // y a un souci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Peut être cette entrée de la FAQ correspond-elle à ce que tu cherche à faire

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Piece {
    private:
    	Case* place; // je pensais qu'une pièce pointe sur une case 
    		
    public:
    	Piece();
    	~Piece();
    	Case* getPiece(){return place;}
    	void setPiece( Case& B1){place = &B1;}
         void Deplacer(int ligne , int colonne); // pour pouvoir le déplacer 
         void DeplacerCase(Case& B); // délacement à partir d'une case 
    	void Afficher1();
    	ostream &operator<<(Piece B) ;
    	};
    L'opérateur<< est déclaré comme fonction membre de la classe Piece. Or la spécialisation de l'opérateur ne s'applique pas à un objet Piece mais à un objet std::ostream. Donc, tu devrais le déclaré comme fonction libre. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	ostream &operator<<(Piece B) ;
    	
    class Piece {
    private:
    	Case* place; // je pensais qu'une pièce pointe sur une case 
    		
    public:
    	Piece();
    	~Piece();
    	Case* getPiece(){return place;}
    	void setPiece( Case& B1){place = &B1;}
         void Deplacer(int ligne , int colonne); // pour pouvoir le déplacer 
         void DeplacerCase(Case& B); // délacement à partir d'une case 
    	void Afficher1();
    };
    P.S. : ta fonction afficher devrait être const. As-tu compris les liens fournis dans une de tes précédentes questions ?

  4. #4
    Débutant Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Piece {
    private:
    	Case* place; // je pensais qu'une pièce pointe sur une case 
    		
    public:
    	Piece();
    	~Piece();
    	Case* getPiece(){return place;}
    	void setPiece( Case& B1){place = &B1;}
         void Deplacer(int ligne , int colonne); // pour pouvoir le déplacer 
         void DeplacerCase(Case& B); // délacement à partir d'une case 
    	void Afficher1();
    	ostream &operator<<(Piece B) ;
    	};
    L'opérateur<< est déclaré comme fonction membre de la classe Piece. Or la spécialisation de l'opérateur ne s'applique pas à un objet Piece mais à un objet std::ostream. Donc, tu devrais le déclaré comme fonction libre. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	ostream &operator<<(Piece B) ;
    	
    class Piece {
    private:
    	Case* place; // je pensais qu'une pièce pointe sur une case 
    		
    public:
    	Piece();
    	~Piece();
    	Case* getPiece(){return place;}
    	void setPiece( Case& B1){place = &B1;}
         void Deplacer(int ligne , int colonne); // pour pouvoir le déplacer 
         void DeplacerCase(Case& B); // délacement à partir d'une case 
    	void Afficher1();
    };
    P.S. : ta fonction afficher devrait être const. As-tu compris les liens fournis dans une de tes précédentes questions ?
    oui merci !!
    pour la fonction libre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Droits pour exécuter une vue qui pointe vers une autre base ?
    Par fredg9 dans le forum Administration
    Réponses: 3
    Dernier message: 08/11/2012, 13h21
  2. bouton qui pointe vers une page jsp
    Par redabadache3 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/10/2007, 14h33
  3. Une Combobox, qui redirige vers une Feuille
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2006, 11h42
  4. [j3d] afficher une ligne qui point vers un objet
    Par guitalca dans le forum 3D
    Réponses: 1
    Dernier message: 06/03/2006, 21h44
  5. [Frames] un lien vers une page de Frames vers une page sans
    Par jamesleouf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/09/2005, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo