我是C ++的新手,并且有其他程序语言的经验,但我有一个问题: 如何从父类?
访问子类的列表这是我的布局: 带有TutorialApp :: update()函数的TutorialApp.cpp 在该函数中,我想从另一个类访问列表mParticles2y 该列表在:ParticleController.cpp中,如下所示:
std::list<int> mParticles2y;
我尝试过这样的[在TutorialApp中]访问列表:
mParticleController.mParticles2y.size()
[获得它的大小]
但这给了我这个错误:
调用没有适当运算符的类类型的对象
所以我真的不知道从哪里开始......
PS:我使用mParticleController,因为这是我脚本中的状态:
ParticleController mParticleController;
我希望这是足够的信息。
PS:我不确定这是一个类,还是孩子,我使用这些术语是因为我从ActionScript中知道它们[以类似的方式使用类]
答案 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.mParticles2y
,mParticles2y
必须是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
}
}