2010-12-20 52 views
3

位置誤差的在下面留言表示。請幫助解決這個問題。左括號「(」在「Foo.cpp中」發現不正確匹配

#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 2010-12-20 13:10:29

+2

你知道標準庫'string'類,對吧? – jalf 2010-12-20 14:06:10

回答

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) 

應該

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

注意如何有4 (但只有3原線)。這些需要匹配,但他們不需要。由於第二個strlen()之前的(是多餘的(不需要在括號中包含strlen(ss.str)),所以您可以將其刪除。

Original code with changes to the #includesfixed code。請注意,我必須將#includestring.h更改爲cstring ideone。無論如何,這是首選。我還必須添加using namespace std;,因爲您的代碼在必要時未明確使用std namepsace,例如,使用cout。你也應該take care of those warnings

編譯器錯誤指向4行的原因是因爲這是它實現的行「哦,不,這裏有一個問題,我永遠無法解析這段代碼!」海灣合作委員會在錯誤報告方面相當糟糕,但只有一個編譯器(例如鏗鏘聲)能夠更好地處理錯誤,會回溯到錯誤根本原因所在的適當行,甚至可能會爲您提供修復建議。