question sur les opérateurs
	
	
		bonjour
je fais un programme sous visual c++ 6.0 et j'obtiens des messages d'errors.
j'avais un problème d'opérateurs.
pourriez vous m'aider pour le programme suivant svp?
	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
   |  
#include <string.h> // strcpy(); strlen();
#include <conio.h> // getch();
#include <iostream> // cout et cin
using namespace std;
 
class String
{
// private :
    int nbr;
    char *ptr;
public:
    String (char[]);
    String (char);
    ~String();
    String& operator=(const String &);
    String(const String &);
  /*  String plus (const String &); */
    String operator+(char);
};                                   
 
String String::operator+(char c)
{
    char*chaine=new char[nbr+1];
    for(int i=0;i<nbr-1;i++)
        chaine[i]=ptr[i];
    chaine[nbr-1]=c;
    chaine[nbr]='\0';
    String resultat(chaine);
    delete chaine;
    return(resultat);
}
 
void main ()
{
    String s1("azerty"),s2('q');
 
    String s3=s1+s2; // erreur ici
 
   /* s3=s1+'w'; cette ligne là fonctionne*/
    getch(); 
} | 
 l'erreur du compilateur est la suivante :
	Code:
	
1 2 3 4
   |  
error C2679: binary '+' : no operator defined which takes a right-hand operand of type 'class String' (or there is no acceptable conversion)
 
error C2512: 'String' : no appropriate default constructor available  | 
 ce sont les 2 erreurs et normalement on dit bien s1+s2 qui vont donner un nouveau String s3.
Si j'essaye avec devc++, il me dit :
	Code:
	
1 2
   |  no match for 'operator+' in 's1 + s2' 
 candidates are: String String::operator+(char)  | 
 Comme ça marche avec s1+'w' donc l'opérateur "+" fonctionne, de là s1+s2 devrait marcher
ptet que ça ne marche pas parce que s2 est un objet ayant 'w' et non un caractère mais alors comment modifier la fonction operator+ pour que ça marche aussi avec +s2 et aussi avec +'w'  ?
Merci
	 
	
	
	
		Re: question sur les opérateurs
	
	
		Quelques erreurs en vrac, je n'ai lu qu'en diagonale.
	Citation:
	
		
		
			
				Envoyé par isidore
				
			
			
	Code:
	
1 2 3 4 5 6 7 8 9 10
   |  
String String::operator+(char c)
{
    char*chaine=new char[nbr+1];
    for(int i=0;i<nbr-1;i++)
        chaine[i]=ptr[i];
    chaine[nbr-1]=c;
    chaine[nbr]='\0';
    String resultat(chaine);
    delete chaine; | 
  
			
		
	 
 Attention : Si on utilise new ...[...], il faut utiliser delete []...Là, tu définis juste comment ajouter 1 caractère à une chaîne.int main()
	Citation:
	
		
		
			
				Envoyé par isidore
				
			
			
	Code:
	
1 2 3 4
   | {
    String s1("azerty"),s2('q');
 
    String s3=s1+s2; // erreur ici | 
  
			
		
	 
 Là, tu essayes d'ajouter une chaîne à une chaîne.
Pour que ça marche, il faut :
- Soit qu'il existe un opérateur qui sache ajouter une chaîne à une chaîne, comme celui que tu as mis en commentaire. Ici, décommenter cet opérateur et l'implémenter est la vraie solution.
- Soit qu'il existe pour le compilateur un moyen de caster une chaîne en une lettre, ce qui n'aurait pas de sens.