2016-09-16 5 views
0

Я работаю над программой для AVR с использованием C++передавая массив междунар в конструктор по ссылке

Чтобы использовать меньше память, я хочу передать указатель на предопределенную массив междунара через конструктор к члену класса, чтобы получить доступ к массиву, используя ООП

Я не могу определить этот массив в конструктор, потому что это Lib класс и этот массив и его размер будет изменен в других программах, с помощью этой библиотеки класс

Код:

class A 
{ 
    private: 
     const unsigned char arr[]; 
     unsigned char arrSize; 
    public: 
     A(const unsigned char arr[],unsigned char arrSize) 
     { 
      this->arr = arr; 
      this->arrSize=arrSize; 
     } 
}; 

Получил следующую ошибку компиляции:

несовместимых типов в присвоении «неподписанного символа *» до «неподписанного символа [0]

Я понимаю, что я сделал Somthing неправильно, но я не могу понять, что именно неправильно и как это исправить.

+0

Нужно ли «A» просто указывать на массив или ему нужно владеть массивом? – NathanOliver

+0

просто указывать на массив –

+0

const можно инициализировать только с помощью списка инициализаторов. –

ответ

2

Из комментариев вы говорите, что нужно просто указатель на массив. Для этого вам просто нужен указатель в вашем классе. Он должен выглядеть примерно так:

class A 
{ 
    private: 
     const unsigned char* arr; // just use a pointer here 
     unsigned char arrSize; 
    public: 
     A(const unsigned char arr[],unsigned char arrSize) : arr(arr), arrSize(arrSize) {} 
     //     ^^^^^ this decays to a const unsigned char* 
}; 

Я предупреждаю вас, что этот дизайн может быть проблематичным. Если объект класса переживает массив, на который он указывает, и вы используете указатель, то у вас есть неопределенное поведение, поскольку вы больше не знаете, что находится в этом пространстве.

+0

Итак, я могу использовать 'this-> arr [0]', 'this-> arr [1]' или аналогичный код в классе или нет? даже если я использую не 'uint', а' struct' или любой другой? это не связано с моей задачей, а просто для понимания вещей, спасибо) –

+0

@ E.Monogarov Да, вы можете использовать 'this-> arr [0]' или просто 'arr [0]' внутри класса. – NathanOliver

+0

это не может быть проблематичным, поскольку этот массив представляет живое для всего времени работы программы –

-1

Вы не можете назначить const, даже не в конструкторе. Вместо этого вам необходимо инициализировать сопзЬ в начале конструктора с «:» синтаксис:

A(const unsigned char Arr[],unsigned char arrSize) : arr{Arr}

+0

Я не думаю, что это скомпилируется. Вы должны указать размер во время компиляции члена 'arr'. Вы это делаете? –

 Смежные вопросы

  • Нет связанных вопросов^_^