У меня есть задание, в котором нам поручено разработать класс, который имитирует то же поведение, что и строковый класс в стандартной библиотеке. Наш строковый класс существует в отдельном пространстве имен и не использует какую-либо часть стандартной библиотеки. Класс определен в заголовочном файле и реализован в файле 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: Строковый класс определяется в том же пространстве имен, что и фактические определения функций. По сути, строковый класс должен иметь возможность инициализироваться строковым литералом и должен иметь возможность динамического изменения при добавлении в него. Этот оператор «плюс» предназначен для того, чтобы взять другой строковый объект, объединить данные и вернуть новый объект, содержащий новую строку, состоящую из данных обоих исходных объектов