2016-05-31 19 views
0

2次元配列のサイズを1次元で2倍にしたい。私は十分な要素は、その行の中にある場合、ARRAY_SIZEを倍増したいプライベートメンバーに私的な属性C++の動的2次元配列

private: 
static const int ARRAY_SIZE=2; 
static const int NUM_ARRAYS=26; 

Profile membersArray[NUM_ARRAYS][ARRAY_SIZE]; 

を定義した2次元配列を持っています。私はそれが配列のprivate属性であることに関係していると仮定し

error: Array type 'Profile[26][2] is not assignable 

に私のプライベートメソッド

void MyADT::copyAndDoubleArray(){ 
membersArray= new (nothrow) Profile[NUM_ARRAYS][2*ARRAY_SIZE]; 
} 

次のエラーで が発生します。だから私は、私は動的割り当てに

+1

C++配列のサイズを変更することはできません。それらのサイズはコンパイル時に固定されています。 'std :: vector'または同様のコンテナ型を使用してください。 – PaulMcKenzie

+0

ご清聴ありがとうございます。奇妙なのはこれが課題のためであり、教授は特に配列を使うことだけが許されていると宣言しています。私はそのリンクリストの必要性を示すための練習と思います。 –

答えて

0

ありませんが可能に配列を初期化する方法を知っておく必要があると思う、それはあなたがメンバ関数の内部でmembersArrayにアクセスしようとしているあなたのコードから見たのでprivateとして宣言されたメンバを何の関係もありません。

ポインタをProfileにしてクラスを作成し、1次元でメモリを割り当てます。

Profile *membersArray; 
membersArray = new Profile[NUM_ARRAYS*ARRAY_SIZE]; 

今、あなたはあなたがして、既存の配列のサイズを増やしたい場合はx and y今すぐ[0 <= x < NUM_ARRAYS] and [0 <= y < ARRAY_SIZE]

2D配列の次元ですmembersArray(x*ARRAY_SIZE+y)としてmembersArrayの要素にアクセスすることができます

Profile *temp = new Profile[NUM_ARRAYS*(2*ARRAY_SIZE)]; 
//You can code here to copy existing elements from membersArray to temp. 
//Elements of temp can be accessed as temp(x*(2*ARRAY_SIZE)+y)` where x and y are dimension of the 2D array and [0 <= x < NUM_ARRAYS] and [0 <= y < (2*ARRAY_SIZE)] 
//Now delete membersArray. 
delete [] membersArray; 
//Now assign new increased sized array to membersArray. 
membersArray = temp; 
0

配列タイプのオブジェクトは、全体としては変更できません。 は「左辺」です(例:アドレスo f配列をとることができます)、代入演算子の左側に を表示できません。 [*]

だから、あなたはnew[]-expressionを使用して配列を宣言する必要があります。あなたは次のようなものになるかもしれません:

private: Profile **ppMembersArray; 
public: constructor() { 
    resize(DEFAULT_ROWS_COUNT, DEFAULT_COLUMNS_COUNT); 
} 
void resize(int newRowsCount, int newColumnsCount) { 
    // allocate some enough memory.. 
    Profile **ppNewMembersArray = new Profile*[newRowsCount]; 
     for (int i = 0; i < newRowsCount; i++) 
      ppNewMembersArray[i] = new int[newColumnsCount]; 
    // copy the existing data to the new address, release the previous ones, and so on.. 
}