Вы не можете назначить вектор после того, как он был инициализирован, это const
. Решение состоит в том, чтобы инициализировать это. Поскольку ваш код имеет дело с необработанными указателями и требует некоторых напоминаний о правильном их использовании или использовании вместо этого умных указателей, но это не топика c вопроса, я позволил себе просто привести пример: 1002 *
#include <vector>
struct foo {
const std::vector<int> x;
foo(const std::vector<int>& a) : x(a) {}
};
int main() {
std::vector<int> v{1,2,3,4};
foo f(v);
}
Члены инициализируются перед выполнением тела конструктора, поэтому местом для его инициализации является список инициализатора члена конструкторов.
Обратите внимание, что создание элемента const
редко хорошая идея. Например, вы не можете копировать экземпляры, когда у них есть член const
. Если вы хотите, чтобы член не изменялся после создания, это ситуация, когда инкапсуляция действительно окупается. Сделайте члена приватным и не предоставляйте доступ для записи извне. Тогда извне член не подлежит изменению, но вы все равно можете копировать экземпляры класса.
PS: сообщение об ошибке может быть немного запутанным здесь. Это относится к =
из std::vector
, поэтому this
в сообщении - это вектор, а не ваш AllAnimals
экземпляр. «Передача XY в качестве аргумента« this »отбрасывает квалификаторы» - это типичное сообщение об ошибке, которое вы получаете, когда возникает проблема с константной корректностью функции-члена.