список доступа из класса, в родительском - PullRequest
2 голосов
/ 26 октября 2011

Я новичок в C ++ и имею опыт работы с другими языками программирования, но у меня есть вопрос: Как я могу получить доступ к списку из подкласса, от родителя?

Вот мой макет: TutorialApp.cpp с функцией TutorialApp :: update () В этой функции я хочу получить доступ к списку mParticles2y из другого класса этот список создается в: ParticleController.cpp, например:

std::list<int> mParticles2y;

Я пытался получить доступ к списку следующим образом [в TutorialApp]: mParticleController.mParticles2y.size() [чтобы получить его размер]

но это дает мне эту ошибку:

вызов объекта типа класса без соответствующего оператора

Так что я действительно не знаю, куда идти отсюда ...

PS: я использую mParticleController, потому что это состояние в моем скрипте:

ParticleController mParticleController;

Надеюсь, этого достаточно.

PS: я не совсем уверен, что это называется класс или дочерний элемент, я использую эти термины, потому что знаю их по ActionScript [который работает с классами аналогичным образом]

Ответы [ 4 ]

1 голос
/ 26 октября 2011

Ваш код для цикла с ошибками должен выглядеть примерно так.Он может не скомпилироваться точно, так как я не могу скомпилировать его легко в данный момент.Это не идеальный способ сделать это, но это минимальное влияние на ваш код.Я бы переместил этот цикл в класс ParticleController как функцию-член, которая возвратила true / false, чтобы указать попадание.Так будет лучше.

    for(std::list<int>::iterator yit = mParticleController.mParticles2y.begin(), 
       std::list<int>::iterator xit = mParticleController.mParticles2x.begin();
       yit != mParticleController.mParticles2y.end() && xit != mParticleController.mParticles2x.end();
yit++, xit++)
   {
    if(
        (coordy >= *it) && (coordy <= (*it) + 40) &&
        (coordx >= *xit) && (coordx <= (*xit) + 40) 
       )
    {   
       mParticleController.removeTargetedParticles(i); //remove blokje
             score += 1; //score verhogen
    }

}

1 голос
/ 26 октября 2011

Хорошо, так что это выстрел в темноте, так как ваш вопрос, хотя и очень многословный, не хватает кода, необходимого для воспроизведения проблемы.

Вы можете получить доступ только к открытым членам (данным или функциям) других объектов.То есть для доступа к mParticleController.mParticles2y, mParticles2y должен быть открытый член любого типа mParticleController.

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

Это называется инкапсуляция и является одним из краеугольных камней объектно-ориентированной парадигмы.

0 голосов
/ 26 октября 2011

Предоставленная вами информация несколько неоднозначна, но, похоже, вы пытаетесь получить доступ к закрытому состоянию (списку) одного класса (ParticleController) из другого класса (The TutorialApp).Я предполагаю следующую структуру кода (обратите внимание, что я не пытался скомпилировать это, так что это может быть не совсем правильно):

#include <list>

class ParticleController
{
    public:
        ParticleController() {}

        std::list<int> &getParticles2y() const
        {
            return mParticles2y;
        }

    private:
        std::list<int> mParticles2y;
}

class TutorialApp
{
public:
    void update()
    {
        // ...
        ParticleController mParticleController;
        //std::list<int> particles2y = mParticleController.mParticles2y; // error - accessing private member of another class
        std::list<int> &particles2y = mParticleController.getParticles2y(); // OK
    }
}
0 голосов
/ 26 октября 2011

size - это метод, вам нужно написать size().

...