2010-12-20 3 views
3

Emplacement de l'erreur est indiquée dans un commentaire ci-dessous. S'il vous plaît aider à résoudre ce problème.La parenthèse gauche « (» trouvé à « foo.cpp » n'a pas été correctement adapté

#include<iostream.h> 
#include<string.h> 
#include<stdlib.h> 
class String 
{ 
private: 
    enum{sz=80}; 
    char str[sz]; 
public: 
    String() 
    { 
     strcpy(str,""); 
    } 

    String (char s[]) 
    { 
     strcpy(str,s); 
    } 

    void display() const 
    { 
     cout<<str; 
    } 
    String operator +(String ss) const 
    { 
     String temp; 
     if(strlen(str) + (strlen(ss.str) < sz) 
     { 
      strcpy(temp.str,str); 
      strcat(temp.str , ss.str); 
     } // Error is reported here! 
     else 
     { 
      cout<<"\nstring overflow"; 
      exit(1); 
     } 
     return temp; 
    } 

}; 
int main() 
{ 
    String s1="\nMerry christmas"; 
    String s2="happy new year"; 
    String s3; 

    s1.display(); 
    s2.display(); 
    s3.display(); 

    s3=s1+s2; 
    s3.display(); 
    cout<<endl; 
    return 0; 
} 
+0

Qu'est-ce que vous utilisez pour éditer votre code source? Un bon éditeur vous pointera habituellement visuellement dans la bonne direction. – darioo

+2

Vous connaissez la classe de la bibliothèque standard 'string', n'est-ce pas? – jalf

Répondre

4

l'erreur se produit ici:

if(strlen(str) + (strlen(ss.str) < sz) 

cela devrait probablement:

if (strlen(str) + strlen(ss.str) < sz) 
4

Il vous manque une parenthèse à droite la fin de cette ligne:

if(strlen(str) + (strlen(ss.str) < sz) 
8
if(strlen(str) + (strlen(ss.str) < sz) 

devrait être

if(strlen(str) + strlen(ss.str) < sz) 

Remarquez comment vous avez 4 ( mais seulement 3 ) dans la ligne d'origine. Ceux-ci doivent correspondre, mais ils ne le font pas. Depuis le ( avant le deuxième strlen() est superflu (il n'est pas nécessaire d'envelopper strlen(ss.str) entre parenthèses), vous pouvez le supprimer.

Original code with changes to the #includes et fixed code. Notez que j'ai dû changer le #include s de string.h à cstring pour ideone. C'est le choix préféré de toute façon. Je devais également ajouter using namespace std; car votre code n'utilisait pas explicitement le nom std si nécessaire, par ex. en utilisant cout. Vous devriez également take care of those warnings.

La raison pour laquelle l'erreur du compilateur pointe vers 4 lignes est parce que c'est la ligne où il réalise "Oh non, il y a un problème ici, je ne serai jamais capable d'analyser ce code!" GCC est assez minable pour les rapports d'erreurs, mais un compilateur (par exemple, un clang) qui ferait un meilleur travail reviendrait sur la ligne appropriée où se trouve la cause de l'erreur et pourrait même suggérer un correctif pour vous.

Questions connexes