Ошибка при преобразовании в char * в мой объект пользовательского класса (MyString) - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь написать свой собственный класс строки, используя библиотеку для подготовки к экзамену. Но у меня была эта ошибка, говорящая, что

main.cpp:9:22: error: no match for ‘operator+’ (operand types are ‘const
 char [5]’ and ‘MyString’)
 MyString c = "Hola" + b;

Моя главная такая. Работает файл, потом "Привет" и б поменяй место.

MyString b("Mundo\n");
MyString c = "Hola" + b;

Я думаю, что это не вызывает конструктор там. У моего класса есть это в частном порядке.

char * _str
int _length

Мой конструктор.

MyString::MyString(const char * str){

    int length = 0;
    for(char c = str[0]; c != '\0' ; c++)
        ++length;

    _length = length;
    _str = new char[length+1];

    strcpy(_str,str);

}

И мой + перегруз

const MyString MyString::operator+(const MyString& mS) const{

    char * tempChar = new char[_length + mS._length];
    MyString tempStr(tempChar);
    delete[] tempChar;
    strcpy(tempStr._str,_str);
    strcat(tempStr._str,mS._str);

    return tempStr;
}

Редактировать: я решил это, сделав функцию оператор + другом, но я хочу знать, почему

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

когда пишешь

 MyString b{"Mundo\n"};
 MyString c = b + "Hola";

строковый литерал будет отправлен вашему оператору + paremeter функции, а объект MyString создан с помощью "Holla" (вы можете проверить это, написав текст в вашем конструкторе).

Кроме того, когда вы не написали функцию своего друга и не написали

 MyString b{"Mundo\n"};
 MyString c = "Holla" + b; 

компилятор будет искать функцию с первым параметром const char * и не может найти. это причина написания функции друга. Я надеюсь, что вы можете понять причину

0 голосов
/ 10 ноября 2018

Ваша проблема с функцией перегрузки

const MyString MyString::operator+(const MyString& mS) const;

Он принимает const MyString & в качестве параметра, но вы предоставляете ему постоянный массив символов (строковый литерал).

Если вы измените

MyString c = "Hola" + b;

в

MyString c = MyString{"Hola"} + b;

скомпилируется без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...