2015-12-16 2 views
-3

У меня проблема. Я хочу создать новый массив из IOBjekt, я заполнил массив, и теперь я хотел бы отправить массив в другой класс (Hra). Можете ли вы помочь мне с указателями. Я не знаю, как использовать этот массив и метод вызова из объекта.Отправка массива между классами в C++

Сохранить в массив

IObjekt **store = new IObjekt*[3]; 
for (int i = 0; i < 3; i++) 
{ 
    store[i] = new BMPObjekt(aHraciaPlocha, "ball.bmp"); 

    cout << store[i] << endl; 
} 

aHra = new Engine(aHraciaPlocha, *store); 

Анализировать массива

Engine::Engine(ISystem * plocha, IObjekt *objekty) 
    :aHraciaPlocha(plocha), aObjekty(objekty), aSkore(0) 
{ 

    for (int i = 0; i < 3; i++) { 

     IObjekt *objekt = &objekty[i]; // This doesnt work 
     cout << objekt->dajX << endl; 

    } 

} 

Спасибо.

+0

3 в вашем внешнем коде находится на другом уровне косвенности чем 3 в «Engine :: Engine». Либо удалите уровень косвенности во внешнем коде, либо добавьте его в «Engine :: Engine». – JSF

+0

Вам действительно нужны все эти указатели и массивы c-style? Не можете ли вы со стандартным контейнером, как 'vector', и вместо этого передать« ссылку »? – 4386427

ответ

1

Я предполагаю, что отношения между BMPObjekt и IObjekt (которые вы не показывали) не позволяют вам легко удалить уровень косвенности из внешнего кода. Таким образом, вы должны добавить уровень косвенности вызываемому кода, удаление * из вызова:

aHra = new Engine(aHraciaPlocha, store); 

...

Engine::Engine(ISystem * plocha, IObjekt **objekty) 
    :aHraciaPlocha(plocha), aObjekty(objekty), aSkore(0) 
{ 

    for (int i = 0; i < 3; i++) { 

     IObjekt *objekt = objekty[i]; 
     cout << objekt->dajX << endl; 

    } 

} 
+0

Он показывает мне ошибку 'ErrorC3867 \t 'IObjekt :: dajX': нестандартный синтаксис; используйте '&', чтобы создать указатель на члена. Что случилось? – PatrikD

+0

Как объявляется dajX? Вы использовали его как данные. Эта ошибка может означать, что это функция-член. – JSF

Смежные вопросы