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();
}