Левая скобка '(' найдена в 'foo.cpp' не соответствует - PullRequest
3 голосов
/ 20 декабря 2010

Расположение ошибки указано в комментарии ниже.Пожалуйста, помогите исправить это.

#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 ]

8 голосов
/ 20 декабря 2010
if(strlen(str) + (strlen(ss.str) < sz)

должно быть

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

Обратите внимание, что у вас есть 4 (, но только 3 ) в исходной строке.Они должны совпадать, но это не так.Поскольку ( перед вторым strlen() является излишним (нет необходимости заключать strlen(ss.str) в скобки), вы можете удалить его.

Исходный код с изменениями #includes и фиксированный код .Обратите внимание, что мне пришлось изменить #include с string.h на cstring для идеона.В любом случае, это предпочтительный выбор.Мне также пришлось добавить using namespace std;, поскольку ваш код явно не использовал пространство имен std, где это необходимо, например, cout.Вы также должны позаботиться об этих предупреждениях .

Причина, по которой ошибка компилятора указывает на 4 строки, заключается в том, что это строка, где она понимает: «О, нет, здесь проблеманикогда не смогу разобрать этот код! "GCC довольно дурацкий в сообщениях об ошибках, но компилятор (например, clang), который лучше справляется с этой задачей, возвратился бы к соответствующей строке, где на самом деле лежит основная причина ошибки, и может даже предложить решение для вас.

4 голосов
/ 20 декабря 2010

Ошибка возникает здесь:

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

Это, вероятно, должно быть:

if (strlen(str) + strlen(ss.str) < sz)
4 голосов
/ 20 декабря 2010

В конце этой строки отсутствует правая скобка:

if(strlen(str) + (strlen(ss.str) < sz)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...