2016-10-30 7 views
-1

オブジェクトの配列を動的に作成し、配列内のオブジェクトのメンバー関数を使用しようとしています。私はいくつかの組み合わせを試しましたが、配列内のオブジェクトの表示メンバーを呼び出そうとするとプログラムがクラッシュします。オブジェクトの配列からのメンバー関数へのアクセス

Something * pSomethings[12] = { NULL }; //pointer to array of 12 Somethings 

to load the array I use: 
Something * pSomething; //create a temp pointer of Something 
pSomething = pSomethings[0]; //assign temp pointer to first item in array 
pSomething = new Widget(size, weight);//pSomthings[0] should be a new widget 
cout << pSomething->getSize(); //seeing if data member was set (shows correct) 
cout << pSomething->getWeight(); //seeing if data member was set (shows correct) 

when I try to invoke the following my program breaks: 
Something::display(){ 
Something * pSomething; //create another local temp pointer 
pSomething = psomethings[0];//assign temp pointer to initialized pSomthing above 
cout << pSomething->getSize(); // <---- breaks if run in main. 
} 

は、私はC++と私は非常に単純な間違いを作ることができ、一般的にポインタに新たなんだけどのgetSize()は最初の関数ではなく、ディスプレイに正しく表示されるなぜ私は単に私が作成)(理解していませんすべて同じ(一時ポインタ、同じインデックスに割り当てるなど)、私はエラーが発生します。

pSomething = pSomethings[0]; //assign temp pointer to first item in array 
pSomething = new Widget(size, weight);//pSomthings[0] should be a new widget 

あなたはpSomethingnewから返された値を割り当てると最後のコメントが間違っている、ないpSomethings[0]へ:

+0

あなたのコードを再配置して、コメントコードの一致を作ることは、それが有効になるだろう。 –

答えて

4

はここのコメントを見てみましょう。

あなたが書かれている必要があります。

pSomethings[0] = new Widget(size, weight); //pSomthings[0] should be a new widget 

を今すぐコードコメントが正しいです。

+0

ありがとう!ありがとうございました!ありがとうございました!私は、インデックス表記でpSomethings [0]を使用しても、ポインタ解決 - >を使用できるかどうかはわかりませんでした。私はpsomething [index]のインデックスを別の一時ポインタに割り当てる方法はありますか? – user2093601

+0

@ user2093601、 'auto ptr = pSomethings [index]'? – ForceBru

0

間違った順序で処理しています。

あなたはまた、割り当てについて少し前向きに考えています - x = aは、他の方法ではなく "assign a to x"と読みます。シーケンス内の特に

pSomething = pSomethings[0]; //assign temp pointer to first item in array 
pSomething = new Widget(size, weight);//pSomthings[0] should be a new widget 

最初の割り当てはpSomethingに配列の最初の要素を割り当て、そして第二の割り当ては、配列に影響を及ぼさない - それはまだヌルポインタです。
ポインタには何も特別なものはありません。そのコードは正確に

int x; 
int y = 2; 
x = y; 
x = 10; 

のように動作し、あなたはyは右、その後2なく10ことを期待するでしょうか?実際に何かと12代の配列へのポインタではない* *への12個のポインタの配列です

Something * pSomethings[12] = { NULL }; //pointer to array of 12 Somethings 

pSomethings[0] = new Widget(size, weight);//pSomethings[0] should be a new widget 
Something * pSomething; //create a temp pointer to Something 
pSomething = pSomethings[0]; //assign first item in array to temp pointer 
関連する問題