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 = si on voulait avoir l'adresse


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de razily
    Inscrit en
    Février 2009
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 376
    Par défaut comment surcharger l'opérateur = si on voulait avoir l'adresse
    Bonjour à tous ,
    c'est toujours en relation à un projet sur le jeu d'échecs , j'essai de simplifier mes codes afin que vous verrez mon réel problème
    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
     
    class Case {
     
    	 private:
        int ligne ;
        int colonne ;
        // etiquette servant à marquer le plateau ex : 'p' pour pion 
        char etiquette;
     
    public :
     Case(int col , int lin, char etiq);
     Case& Case::operator=(const Case &P1);
     
    }
    Case::Case(int col , int lin,char etiq):colonne(col),ligne(lin),etiquette(etiq)
     {}
    // surcharge de l'opérateur = permettant de faire SS[0][0] = P1
     
    Case& Case::operator=(const Case &P1){
     
     
    	this->colonne = P1.GetColonneCase();
    	this->ligne = P1.GetLigneCase();
    	this->etiquette = P1.etiquette;
     
    	}
     
    après pour le plateau j'ai mis un vector de case 
    std::vector< std::vector<Case*> > SS(10,std::vector<Case*>(10));
    après j'ai essayé de faire çà et il insère chaque case :
    Case* P1 = new Case(0,9,' ');
    	Case* P2 = new Case(1,9,'a');
    SS[0][0] = P1;
    	SS[0][1] = P2;
    mais
    le problème vient qd je crée la classe pièce , je pensais qu'un plateau est formé de plusieurs cases et que chaque pièce est lié à une case ; donc j'ai preferé un pointeur sur une case dans la classe Pièce
    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
    class Piece {
    
    	private:
    	char* couleur;
    	Case* place;
    	char etiq_Piece;
    
    public :
    
    Piece(int col, int lig, char* coul, char etiq);
    
    };
    Piece::Piece(int col, int lig, char* coul, char etiq){
    
    	// on lie le pointeur à la case concernée
    place = &SS[lig][col]; c'est ici qu'il y a un problème 
    place->SetEtiquetteCase(etiq);
    couleur = coul ;
    etiq_Piece = etiq;
    
    }
    
    
    resultat et message d'erreur notamment sur cette affectation :
    Description	Resource	Path	Location	Type
    cannot convert `Case**' to `Case*' in assignment	Piece.cpp	/Chess/src	line 30	C/C++ Problem
    en fait le problème revient , comment faire pour que je puisse d'abord lié place (un pointeur sur case dans la classe Pièce ) et ensuite afin que je puisse changer la case concernée via par le pointeur sur Pièce

    Ce qui m'étonne c'est qu'avec un simple variable çà march mais qd c'est un objet çà ne marche pas
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    #include <iostream>
     
     
    using namespace std ;
     
    int tab [2][2];
     
    class Piece {
     
     
    	public:
     
    	int element ;
    	int* pointeur ;
     
    	Piece(int el);
    	~Piece();
    };
     
    Piece::Piece(int el){
     
    	element = el ;
    	pointeur = &tab[1][0];
    	*pointeur = element;
     
    	}
     
     
     
    //tab[1][0] = 8;
    //tab[1][2] = 9;
     
     
     
     
     
    int main (){
    	tab[0][0] = 1;
    	tab[0][1] = 8;
    tab[1][0] = 2;
    tab[1][1] = 9;
    cout << "la valeur du tableau \n ";
    	for(int i = 0;i<2;i++){
    		for(int j = 0;j<2;j++){
    			cout << tab[i][j] <<" " ;
    			//cout << tab[i] <<" " ;
     
    			}
     
    		}
     
     
     
    int* ptr ;
     
     
    ptr = &tab[1][0] ;
     
    *ptr = 100 ;
     
    cout << "la valeur du tableau après le pointeur  \n ";
    	for(int i = 0;i<2;i++){
    		for(int j = 0;j<2;j++){
    			cout << tab[i][j] <<" " ;
    			//cout << tab[i] <<" " ;
     
    			}
     
    		}
     
     
    Piece* P9 = new Piece(789);
     
     
     
    cout << "la valeur du tableau après  la classe Piece  \n ";
    	for(int i = 0;i<2;i++){
    		for(int j = 0;j<2;j++){
    			cout << tab[i][j] <<" " ;
    			//cout << tab[i] <<" " ;
     
    			}
     
    		}
     
    		cout << " la valeur de pointeur P9 est " << P9->element << endl ;
     
     
     
     
     
    return 0;
     
     
    }
    merci d'avance

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    place = &SS[lig][col]; c'est ici qu'il y a un problème
    Le '&' est en trop, SS[lig][col] est déjà un pointeur sur une Case.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    après pour le plateau j'ai mis un vector de case 
    std::vector< std::vector<Case*> > SS(10,std::vector<Case*>(10));
    après j'ai essayé de faire çà et il insère chaque case :
    Case* P1 = new Case(0,9,' ');
    	Case* P2 = new Case(1,9,'a');
    SS[0][0] = P1;
    	SS[0][1] = P2;
    Tu te complique inutilement la vie avec des pointeurs ici. Les pointeurs ne sont utiles qu'en de rares occasions en C++.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector< std::vector<Case> > SS(10);
    SS[0].push_back(Case(0,9,' '));
    SS[0].push_back(Case(1,9,'a'));
    ...

Discussions similaires

  1. Comment surcharger l'opérateur () ?
    Par Avatar36 dans le forum C++
    Réponses: 7
    Dernier message: 12/05/2015, 11h21
  2. Réponses: 3
    Dernier message: 02/03/2010, 08h16
  3. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  4. [C#]Comment surcharger l'opérateur [] ?
    Par NicolasJolet dans le forum C#
    Réponses: 11
    Dernier message: 09/04/2006, 12h00
  5. [VB .NET] Surcharge d'opérateur
    Par Franckintosh dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/09/2004, 19h05

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