2016-10-30 6 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() правильно отображается в первой функции, но на дисплее() я создаю все одинаково (указатель темпа, присваивается одному и тому же индексу и т. д.), и я получаю сообщение об ошибке.

+0

Это на самом деле массив из 12 указателей на что-то и не * указатель на массив из 12 Somethings *. –

ответ

4

Посмотрите на комментарии здесь:

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

Последний комментарий неверен, как присвоить значение, возвращаемое new в pSomething, не к pSomethings[0].

Вы должны быть написаны:

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

Теперь код и комментарий правильны.

+0

Спасибо! Спасибо! Спасибо! Я не знал, что могу использовать pSomethings [0] с индексной записью и по-прежнему использовать разрешение указателя ->. Как бы присвоить индекс psomething [index] другому указателю temp? – 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 после этого, не так ли?

Перегруппировка код и сделать матч кода ваши комментарии сделает его действительным:

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 
Смежные вопросы