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

SL & STL C++ Discussion :

Blocage sur une classe


Sujet :

SL & STL C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Blocage sur une classe
    bonsoir
    voila je suis entrain de concevoir une classe
    et le compilateur me sort ceci a j'arrive pas a voir d'ou viens le problème
    si quelqu'un pouvait m'aider merci d'avance

    chaine.cpp in function `Chaine operator+(const Chaine&, const Chaine&)':
    chaine.cpp non-lvalue in assignment
    chaine.cpp In function `int main()':
    chaine.cpp no match for 'operator=' in 'c = operator+(const Chaine&, const Chaine&)(((const Chaine&)((const Chaine*)(&b))))'
    chaine.cpp:69 candidates are: Chaine& Chaine::operator=(Chaine&)

    voici la déclaration de ma classe:

    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
     
    class Chaine
    {
          public:
                 Chaine();  //initialise une chaine vide
                 Chaine(const char* txt); //initialise avec la chaine passée en paramètre
                 Chaine(int n);
                 ~Chaine();
                 void affiche();
                 Chaine& operator=(Chaine& ch);
                 int operator==(Chaine ch);
                 friend Chaine  operator+(const Chaine &ch1,const Chaine &ch2);
                 char  operator[](int i)const; 
                 int longeur() const
                 {
                     return lenght;
                 }
     
     
          private:
             int lenght;  //longeur de la chaine
             char* chaineCar; //la chaine allouée dynamiquement
     
     
    };
    les fonctions:

    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
     
    Chaine& Chaine::operator=(Chaine& ch)
    {
         if(this != &ch) //test autoaffection
         {
                 chaineCar = ch.chaineCar;
                 lenght = ch.lenght;            
         }
         return *this;
    }
     
    //-------------------------------------------------
     
    Chaine operator+(const Chaine &ch1,const Chaine &ch2)
    {
     
            Chaine ch3(ch1.longeur() + ch2.longeur());
            int i,j;
            i = j = 0;
            while(i < ch1.longeur()) 
            {
                    ch3[i] = ch1[i]; 
                    ++i;
            }
            while(j < ch2.longeur())
            { 
                    ch3[i++] = ch2[j++];
            }
            return ch3;
     
    }
     
    char  Chaine::operator[] (int i) const
    {
         if(i > lenght)     
         {
              cerr << "Debordement" << endl;
         }
         return chaineCar[i];
    }
    test de main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main()
    {
        c = a+b;
        cout << "c: ";
        c.affiche();
    }

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    ta chaine ch3 que tu crées n'est pas un tableau, donc la ligne suivante est invalide:
    Il ne faut pas confondre références et pointeurs.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    d'autant que son opérateur renvoi une copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char  operator[](int i)const;

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    Si tu definie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chaine(const Chaine& ch);
    Chaine& operator=(const Chaine& ch);
    int operator==(const Chaine ch);
    es ce mieux?

    Citation Envoyé par coyotte507 Voir le message
    Salut,
    ta chaine ch3 que tu crées n'est pas un tableau, donc la ligne suivante est invalide:
    Il ne faut pas confondre références et pointeurs.
    ????
    il redefinie l'operator []
    ??

    Citation Envoyé par reptils Voir le message
    d'autant que son opérateur renvoi une copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char  operator[](int i)const;
    +1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char  &operator[](int i)const;
    serait mieux

  5. #5
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    oui désolé, j'avais mis le prog dans le compilateur, et il y avait une erreur à cette ligne.

    En fait le problème vient du const:
    On ne peut pas changer la valeur d'un const.

    Donc en fait il faut rajouter un opérateur [] sans aucun const, mais avec une réfécrence:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char & operator [] (int i);

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/12/2005, 01h25
  2. [C++] pointeur sur une classe
    Par PH69 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/11/2005, 22h08
  3. Création dynamique de méthode sur une classe ?
    Par elitost dans le forum Général Java
    Réponses: 9
    Dernier message: 18/10/2005, 14h47
  4. Réponses: 14
    Dernier message: 14/03/2005, 09h16
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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