Сообщение об ошибке: «Нет соответствия для 'operator + ='» после использования «string * + =» - PullRequest
0 голосов
/ 18 июня 2020

У меня проблема с c ++. Я использовал указатель на строку и хотел динамически добавить другую строку. Но потом у меня появляется это сообщение об ошибке:

нет совпадения для 'operator + =' (типы операндов: 'std :: __ cxx11 :: string * {aka std :: __ cxx11 :: basic_string *}' и 'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string}')

void Stammbaum::printTree(Node* node, string* s){
    printLeftTree(node, s, 0);
}

void Stammbaum::printLeftTree(Node* node, string* s, int i){
    if(node == NULL)
        return;

    if(i != 0)
        printLeftTree(node->Mutter, s, 1);

    string temporaryString;
    temporaryString = "/-- " + node->vorname + " " + node->nachname + "\n";
    s += temporaryString;                     <------------------------------Getting the error in this Line--

    printLeftTree(node->Vater, s, 1);
}

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Переменная s является указателем на объект std::string, попытка добавить к нему добавит к самому указателю, а не к объекту, на который он указывает.

Вам нужно разыменовать указатель для получения объекта std::string:

*s += temporaryString;

Намного лучшее решение (IMO) - использовать ссылки вместо указателей.

0 голосов
/ 18 июня 2020

Вы также можете использовать std::string функцию-член append, добавляет строку в конец;

s->append( temporaryString );

как и другие предложенные, используйте ссылку вместо указателей

0 голосов
/ 18 июня 2020

s - это строковый указатель, поэтому он должен быть таким

*s += temporaryString;

Если я понимаю, что вы здесь пытаетесь сделать, то обычно в C ++ вы должны использовать ссылку, а не указатель, тогда вы не потребуется *.

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