2016-10-30 3 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

하지 * 12 일도의 배열에 대한 포인터 *. –

답변

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은 "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 포인터의 배열은 사실이다
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 
관련 문제