父类中的类访问列表

时间:2011-10-26 15:07:16

标签: c++ class list parent

我是C ++的新手,并且有其他程序语言的经验,但我有一个问题: 如何从父类?

访问子类的列表

这是我的布局: 带有TutorialApp :: update()函数的TutorialApp.cpp 在该函数中,我想从另一个类访问列表mParticles2y 该列表在:ParticleController.cpp中,如下所示:

std::list<int> mParticles2y;

我尝试过这样的[在TutorialApp中]访问列表: mParticleController.mParticles2y.size() [获得它的大小]

但这给了我这个错误:

  

调用没有适当运算符的类类型的对象

所以我真的不知道从哪里开始......

PS:我使用mParticleController,因为这是我脚本中的状态:

ParticleController mParticleController;

我希望这是足够的信息。

PS:我不确定这是一个类,还是孩子,我使用这些术语是因为我从ActionScript中知道它们[以类似的方式使用类]

4 个答案:

答案 0 :(得分:1)

具有错误的循环代码看起来应该更像这样。它可能无法完全编译,因为我现在无法轻松编译它。这不是理想的方法,但它对您的代码影响最小。我将此循环移动到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 :(得分:1)

好的,所以这是一个黑暗的镜头,因为你的问题,虽然非常罗嗦,缺少重现问题所需的代码。

您只能访问其他对象的 公共 成员(数据或功能)。也就是说,为了访问mParticleController.mParticles2ymParticles2y 必须是mParticleController所属类型的公共成员

当然, 公共数据成员不满意 ,并且有充分的理由。一个类应该代表一个抽象,如果你有一个粒子控制器,它应该实现控制粒子所需的一切,而不是在公众中泄露它的内容,让每个人筛选并获取他们需要的东西。

这称为 封装 ,是面向对象范例的基石之一。

答案 2 :(得分:0)

size是一种方法,您需要编写size()

答案 3 :(得分:0)

您提供的信息有些含糊不清,但看起来您可能正试图从另一个类(The TutorialApp)访问一个类(ParticleController)的私有状态(列表)。

我假设以下代码结构(请注意,我没有尝试编译它,所以它可能不太正确):

#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
    }
}