2013-04-18 8 views
2

Сделал мой собственный класс строк (т. Е. Для домашней работы) и получаю нечетные синтаксические ошибки на двух моих операторах. Мои операторы равенства и добавления утверждают, что у меня слишком много параметров (т. Е. В файле .h), но затем заявляю, что этот метод даже не принадлежит классу в моем .cpp-файле!Оператор (ы) слишком много параметров для этой функции?

Я даже сделал оператор равенства другом, но intellisense все равно дает мне те же сообщения об ошибках.

Кто-нибудь знает, что я делаю неправильно?

friend bool operator==(String const & left, String const & right); 

string.h

bool operator==(String const & left, String const & right); 
String const operator+(String const & lhs, String const & rhs); 

string.cpp

bool String::operator==(String const & left, String const &right) 
{ 
    return !strcmp(left.mStr, right.mStr); 
} 

String const String::operator+(String const & lhs, String const & rhs) 
{ 
    //Find the length of the left and right hand sides of the add operator 
    int lengthLhs = strlen(lhs.mStr); 
    int lengthRhs = strlen(rhs.mStr); 

    //Allocate space for the left and right hand sides (i.e. plus the null) 
    char * buffer = new char[lhs.mStr + rhs.mStr + 1]; 

    //Copy left hand side into buffer 
    strcpy(buffer, lhs.mStr); 

    //Concatenate right hand side into buffer 
    strcat(buffer, rhs.mStr); 

    //Create new string 
    String newString(buffer); 

    //Delete buffer 
    delete [] buffer; 

    return newString; 
} 

ответ

4

Вы должны определить operator== вне класса:

bool String::operator==(String const & left, String const &right) 
    ^^^^^^^^ REMOVE THIS 

Если operator+ также является другом, его также необходимо определить как свободную функцию (т. вне класса).

+0

То же самое относится к 'operator +', будь то 'friend' или враг. – juanchopanza

+0

@NPE - Ничего себе. Огромное спасибо!! – MrPickle5

+0

EDIT: Забыл удалить декларацию метода INSIDE моего класса. Все хорошо. Еще раз спасибо! – MrPickle5

Смежные вопросы