Как передать массив в конструктор и сохранить в переменной класса

У меня есть следующий код сателлита

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.

Теперь мой вопрос: как сохранить массив, переданный конструктором, в переменную класса?

1

Решение

Встроенные массивы — это неприятные вещи, которые ведут себя не так, как большинство объектов 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,

2

Другие решения

Вы должны заметить, что имя массива является указателем на первый узел массива, поэтому, когда вы пишете приведенный ниже код, вы удаляете массив в памяти и тратите его впустую.

this->chipSequence = chipSequence;

На самом деле, простой способ заключается в создании for цикл для копирования узлов по одному от источника к месту назначения.

0

По вопросам рекламы [email protected]