Отсутствует оператор "=", соответствующий операндам

Что тут не так? Почему я в int main() могу строке присвоить значение другой строки, а в конструкторе не могу?

class Player 
{
private:
    const std::string     name;
public:
    Player(std::string name)
    {
        this->name = name; // и вот здесь возникает ошибка
    }
}

Ответы (1 шт):

Автор решения: Mikhailo

Представьте себе две строки:

const string s = "Hello";

s = "World";

Первая скомпилируется нормально, потому что это инициализация константной переменной, а вторая нет, так как это присваивание. У вас та же проблема: вы

this->name = name;

присваиваете, а не инициализируете константную строку. Инициализация в конструкторе делается после имени конструктора и двоеточия:

Player(std::string name):name(name){}

Вот здесь все будет правильно и никаких проблем. Разве что нет смысла делать копию строки для передачи конструктору, лучше передавать ссылку:

Player(const std::string& name):name(name){}
→ Ссылка