Доступ к функции класса, когда экземпляр класса находится в структуре - PullRequest
0 голосов
/ 07 января 2011

У меня есть массив структур -

struct MagicalUnicornBullets {
    PS2Sprite SparklyUnicornBullet();
    bool onscreen; 
};

MagicalUnicornBullets MagicalUnicornBullets[25];

Я хочу перебрать массив и инициализировать содержимое структуры.

Очевидно, это как раз случайдля цикла, а для bool это просто на экране = ложь;но как мне инициализировать SparklyUnicornBullet?

Прямо сейчас мой код -

MagicalUnicornBullets[i].SparklyUnicornBullet.ScaleAbsolute(4,4);

Я хорошо понимаю, что это неправильно - но как мне получить доступ к функциям класса, когда они находятся внутри Struct?

1 Ответ

0 голосов
/ 07 января 2011

Поймите, что SparklyUnicornBullet на самом деле является функцией-членом, которая возвращает объект PS2Sprite. Возвращенный PS2Sprite имеет функцию-член ScaleAbsolute, которую вы хотите вызвать. Таким образом, ваш код выше почти правильно. Вам просто не хватает ():

MagicalUnicornBullets[i].SparklyUnicornBullet().ScaleAbsolute(4,4);

Тем не менее, есть ряд вещей, которые плохо с вашим кодом. Например, вы объявляете массив, имя которого совпадает с именем объекта:

MagicalUnicornBullets MagicalUnicornBullets[25];

Я думаю, что это разрешено, но это настолько злобно и плохо мотивировано, что я даже не могу сказать, что для Certian, потому что я бы отверг любой такой код, независимо от его мотивации или законности. Вы должны дать массиву другое имя:

MagicalUnicornBullets bullets[25];

Далее, ваш цикл инициализации не нужен. Код:

MagicalUnicornBullets MagicalUnicornBullets[25];

создает массив в стиле C размером 25 MagicalUnicornBullets, вызывая конструктор по умолчанию для каждого из них. Поэтому проще всего просто предоставить конструктор по умолчанию, который делает то, что вы хотите:

struct MagicalUnicornBullets {
  MagicalUnicornBullets();
  // ...
};

MagicalUnicornBullets::MagicalUnicornBullets()
:  onscreen(false)
{
  SparklyUnicornBullet().ScaleAbsolute(4,4)
}

Теперь цикл вообще не нужен. Все 25 будут построены и инициализированы так, как вы хотите.

Наконец, обычно в C ++ выгодно вообще не использовать массив в стиле C, а класс коллекции, такой как std::vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...