У меня есть следующий код сателлита
class Satellite
{
private:
const static int CHIP_SEQ_LENGTH = 1023;
bool chipSequence[CHIP_SEQ_LENGTH];
int id;
public:
Satellite(int id, bool chipSequence[])
{
this->id = id;
this->chipSequence = chipSequence;
};
}
Я получаю ошибку в
this->chipSequence = chipSequence;
со следующим описанием:
Expression must be a modifiable lvalue.
Теперь мой вопрос: как сохранить массив, переданный конструктором, в переменную класса?
Встроенные массивы — это неприятные вещи, которые ведут себя не так, как большинство объектов C ++. В частности, они не могут быть назначены.
В современном C ++ я бы, наверное, использовал std::array<bool, CHIP_SEQ_LENGTH>
, Это правильный тип копируемого объекта.
Если вы застряли в прошлом, вы можете создать свой собственный тип обёртки для копирования:
struct ChipSequence {
bool bits[CHIP_SEQ_LENGTH];
};
или явно скопируйте данные:
std::copy(chipSequence, chipSequence+CHIP_SEQ_LENGTH, this->chipSequence);
Есть также альтернативы, такие как std::bitset
или же std::vector<bool>
, которые упаковывают биты, чтобы использовать меньше памяти, если вам не нужен массив bool
,
Вы должны заметить, что имя массива является указателем на первый узел массива, поэтому, когда вы пишете приведенный ниже код, вы удаляете массив в памяти и тратите его впустую.
this->chipSequence = chipSequence;
На самом деле, простой способ заключается в создании for
цикл для копирования узлов по одному от источника к месту назначения.