2015-02-26 6 views
0

У меня есть класс со структурой для своей позиции:Доступ массива структуры через указатель

class thing 
{ 
    void setCoOrds(int, int, int); 

    string name; 
    struct location 
    { 
     int x; 
     int y; 
     int z; 
    } coOrd; 
}; 

Тогда в функции я создал массив типа вещи.

int main() 
{ 
    thing * p_myThings = new thing[5]; 
    // call array element here to use setCoOrds() 
    delete p_myThings; 

    return 0; 
} 

Из основной функции, как бы я получить доступ, позволяет сказать, функцию вещь элемент [3], так что я могу использовать его .setCoOrds()?

+3

Вы просто хотите 'p_myThings [3] .setCoOrds (1,2,3)'? Или я чего-то не хватает? (В любом случае, предпочитайте 'std :: vector' опасный указатель-жонглирование.) –

+2

Вы должны использовать delete [] здесь, иначе вы будете утечка памяти! – Bathsheba

+0

@Mike Seymour О, похоже, я уже слишком усложнял это. Я думал о указателе на массивы и о том, как добавить к указателю и т. Д. Глупо меня. – RawrBawr

ответ

0
int main() 
{ 
    thing * p_myThings = new thing[5]; 

    p_myThings[3].setCoOrds(42,21,0); 

    delete[] p_myThings; // use delete[] for arrays btw 

    return 0; 
} 
+0

Не отправляйте ответы только на код. Объясните поведение и изменения кода для того, чтобы другие поняли. – MickyD

+0

@ MickyDuncan. Да, я очень об этом думал, но поскольку это чистый вопрос синтаксиса, я не нашел ничего другого, кроме «так вы это делаете», вроде бессмысленного заявления :) – Drax

1

Оно должно быть:

p_myThings[3].setCoOrds 

Также

setCoOrds 

является частным по умолчанию, который не позволит вам вызвать функцию.

0

Я полагаю, что функция-член

void setCoOrds(int, int, int); 

имеет контроль общественного доступа. В этом случае вы можете использовать следующие конструкции

p_myThings[3].setCoOrds(x, y, z); 

или

(*(p_myThings + 3)).setCoOrds(x, y, z); 

или

(p_myThings + 3)->setCoOrds(x, y, z); 
0

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

p_myThings[3].setCoOrds(x, y, z); 

И для удаления указателей массивов вы должны использовать delete [] not dele te

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