C ++ Ошибка с возвратом объекта того же типа, что и возвращаемый параметр - PullRequest
0 голосов
/ 05 мая 2018

У меня есть задание, в котором нам поручено разработать класс, который имитирует то же поведение, что и строковый класс в стандартной библиотеке. Наш строковый класс существует в отдельном пространстве имен и не использует какую-либо часть стандартной библиотеки. Класс определен в заголовочном файле и реализован в файле cpp. У меня проблема с перегрузкой оператора + и возвращением нового строкового объекта, который содержит объединенную строку. Код здесь:

String String::operator+(String & str) const {

    char *returnString = new char[str._size + this->_size - 1] 
    // both null terminated strings and this gets the correct size of the new string

    // code concatenating string and storing it in a char * returnString
    // user recommend i remove this since it is not apart of my question


    return String(returnString);
}

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

Возвращение 'String' из функции, возвращающей 'String': класс 'String' не совместим с классом 'String'

Я также пытался объявить строковую переменную и вернуть ее, что-то вроде:

String s1(returnString);
return s1;

Это не дает ошибки и позволяет мне компилировать, но это не работает, так как переменная выходит из области видимости и вызывается деструктор. Я также пытался удалить const из объявления функции, но безрезультатно.

РЕДАКТИРОВАТЬ: заголовочный файл был передан нам профессором, и мы не можем изменить тип возвращаемого значения функции, имя или количество аргументов. Поэтому я не могу изменить тип возвращаемого значения.

РЕДАКТИРОВАТЬ 2: Строковый класс определяется в том же пространстве имен, что и фактические определения функций. По сути, строковый класс должен иметь возможность инициализироваться строковым литералом и должен иметь возможность динамического изменения при добавлении в него. Этот оператор «плюс» предназначен для того, чтобы взять другой строковый объект, объединить данные и вернуть новый объект, содержащий новую строку, состоящую из данных обоих исходных объектов

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