左括号'('找到'foo.cpp'未正确匹配

时间:2010-12-20 13:05:22

标签: c++ compiler-errors

错误的位置在下面的评论中指出。请帮忙解决这个问题。

#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;
}

3 个答案:

答案 0 :(得分: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行的原因是因为它是它实现的行“哦不,这里有问题我永远无法解析这段代码!” GCC在错误报告方面非常糟糕,但只有一个编译器(例如clang)可以更好地完成它,它会回溯到错误的根本原因所在的适当行,甚至可能会建议您修复。

答案 1 :(得分:4)

您在此行的末尾缺少右括号:

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

答案 2 :(得分:4)

此处发生错误:

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

那应该是:

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