【发布时间】:2015-09-28 20:06:52
【问题描述】:
如果我有多个级别的对象包含(一个对象定义并实例化另一个定义并实例化另一个对象的对象..),是否有可能访问上层,包含 -对象变量和函数好吗?
例子:
class CObjectOne
{
public:
CObjectOne::CObjectOne() { Create(); };
void Create();
std::vector<ObjectTwo>vObejctsTwo;
int nVariableOne;
}
bool CObjectOne::Create()
{
CObjectTwo ObjectTwo(this);
vObjectsTwo.push_back(ObjectTwo);
}
class CObjectTwo
{
public:
CObjectTwo::CObjectTwo(CObjectOne* pObject)
{
pObjectOne = pObject;
Create();
};
void Create();
CObjectOne* GetObjectOne(){return pObjectOne;};
std::vector<CObjectTrhee>vObjectsTrhee;
CObjectOne* pObjectOne;
int nVariableTwo;
}
bool CObjectTwo::Create()
{
CObjectThree ObjectThree(this);
vObjectsThree.push_back(ObjectThree);
}
class CObjectThree
{
public:
CObjectThree::CObjectThree(CObjectTwo* pObject)
{
pObjectTwo = pObject;
Create();
};
void Create();
CObjectTwo* GetObjectTwo(){return pObjectTwo;};
std::vector<CObjectsFour>vObjectsFour;
CObjectTwo* pObjectTwo;
int nVariableThree;
}
bool CObjectThree::Create()
{
CObjectFour ObjectFour(this);
vObjectsFour.push_back(ObjectFour);
}
main()
{
CObjectOne myObject1;
}
说,我需要从 CObjectThree 中访问 CObjectOne 中的 nVariableOne。我想这样做:
int nValue = vObjectThree[index].GetObjectTwo()->GetObjectOne()->nVariable1;
但是,在编译并运行我的应用程序后,我收到内存访问冲突错误。
- 上面的代码有什么问题(它是示例,可能包含拼写错误)?
- 我是否必须动态而不是静态创建对象?
- 有没有其他方法可以通过包含对象来实现存储在包含对象中的变量?
【问题讨论】:
-
您的代码不正确。你所有类的所有成员都是私有的,所以这永远不会编译。此外,您的类定义必须以分号结尾。请发布重现错误的正确、有效的代码。
-
@Space_C0wb0Y:您好,感谢您的评论。我想发布我的原始代码,但是,我将它分布在几个类文件中。为了显示我的代码,我必须添加大量文本。如果通过 this 引用包含对象应该有效,即使对象是静态创建的,我基本上对原理感兴趣。
-
如果您想要一个好的答案,您将不得不在问题中投入一些工作。这可能包括编写一个实际编译和重现错误的小型示例应用程序。如果不查看导致错误的实际代码,就很难找到错误的原因。
标签: c++ oop visual-c++ containment