У меня проблема с передачей массива указателей на функцию.C++ передающий массив указателей на функцию
Класс CTree01 является дочерью CDecorationObj. Когда я использую цикл, он работает нормально.
Вот мой код:
CTree01 *trees01;
int numTree01 = ...;
trees01 = new CTree01[numTree01];
//main loop
for(int i=0;i<numTree01;i++)
{
{
//Everything is working okay here, renders all trees
glPushMatrix();
trees01[i].DrawOnTerrain(camera);
glPopMatrix();
}
}
, но так как я заменил на с функцией, она больше не работает:
void DrawDecorationType(CDecorationObj* objs, int number, CCamera *camera)
{
int x,z;
for(int i=0;i<number;i++)
{
{
glPushMatrix();
objs[i].DrawOnTerrain(camera);
glPopMatrix();
}
}
}
//main loop
DrawDecoration(trees01, numTree01, camera);
Когда я в этой функции:
он работает, и он падает только тогда, когда я обрабатываю объекты с индексом> 0, поэтому я думаю, что это должна быть проблема с параметром, переданным в функция.
Вы лечите свои OBJS [] - массив с типом 'CDecorationObj', который, безусловно, имеет различную длину, чем' CTree01 'Давайте предположим, что' CDecorationObj' имеет размер 10 байт, а 'CTree01' равно 20, когда вы обращаетесь к' objs [1] ', вы находитесь на полпути в следующий объект дерева (по памяти), и вы ошибаетесь адрес для 'this' при вызове' DrawOnTerrain'. Попробуйте использовать указатели на свои внутренние элементы (например, 'CTree **' и 'CDecorationObj **') – PuerNoctis
вы не должны быть 'new'ing и' delete'ing просто потому, что вам особенно не нужны исходные указатели как массивы. Google 'std :: vector'. –
Я заменил «CDecorationObj * objs» на «CDecorationObj ** objs», но теперь я получил ошибку «не может преобразовать параметр 1 из« D_CTree02 ** »в« CDecorationObj ** » – Barcio77