Отсутствует оператор "=", соответствующий операндам
Что тут не так? Почему я в 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){}