参照

2016-09-16 12 views
0

私はC++を使用してAVRのためのプログラムに取り組んでいることにより、コンストラクタにint型の配列を渡す参照

私はOOPを使用してアレイにアクセスするには、クラスメンバへのコンストラクタスルーint型の事前に定義された配列へのポインタを渡したい少ないメモリを使用するには

それはlibのクラスだと、この配列とその大きさは、この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; 
     } 
}; 
をコンパイル上

手に入れた次のエラー:unsigned char型」から 'unsigned char型*' の割り当てで

互換性のない型[0]

私は私が間違って気にいらをしましたが、私はできないことを理解正確に何が間違っていて、どのように修正するかを理解する。

+0

'A'は配列を指すか、配列を所有する必要がありますか? – NathanOliver

+0

配列 –

+0

を指すだけで、初期化子リストを使用して初期化することができます。 –

答えて

2

:「:」構文代わりに、とコンストラクタの先頭でのconstを初期化する必要があります。これを行うには、クラス内にポインターが必要です。

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'メンバのサイズを指定する必要があります。あなたはそれをやっていますか? –