2010-12-20 5 views
3

場所は以下のコメントに表示され、正しく一致しなかった。左カッコは、「(」この問題を解決する助けてください。エラーの

#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

ソースコードを編集するために何を使用していますか?優れた編集者は通常、視覚的に正しい方向に向けるでしょう。 – darioo

+2

あなたは標準ライブラリ 'string'クラスについて知っていますか? – jalf

答えて

4

エラーが発生し、ここで:

おそらくあるべき
if(strlen(str) + (strlen(ss.str) < sz) 

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

あなたは右括弧に含まれていませんこの行の末尾:

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

あなたが元の行に4 (だけ3 )を持っているか

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

注意してくださいする必要があります。これらは一致する必要がありますが、一致しません。 2番目のstrlen()の前に(が余分なので(角かっこでstrlen(ss.str)をラップする必要はありません)、削除できます。

Original code with changes to the #includesおよびfixed code。理想的には#includestring.hからcstringに変更しなければならないことに注意してください。それはとにかく好ましい選択です。あなたのコードが明示的にstdネームスペースを必要に応じて使用していなかったので、using namespace std;を追加しなければなりませんでした。 coutを使用してください。またtake care of those warningsにする必要があります。

コンパイラのエラーが4行下を指しているのは、それが「ああ、いいえ、ここで問題はありますが、このコードを解析できないでしょう」という行があるからです。 GCCはエラー報告にはかなり愚かですが、より良い仕事をするコンパイラ(例えばclang)は、エラーの根本原因が実際に存在する適切な行に戻って、あなたのための修正を提案することさえできます。

関連する問題