comment surcharger l'opérateur << pour une classe qui pointe vers une autre classe
Bonjour ,
voici le bout du code :
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
|
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:
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:
1 2 3 4 5 6
|
Case P1;
P1.Afficher(); // çà marche
Case P2(2,3,'C');
P2.Afficher(); // y a un souci |