嗯,我认为这可能是一个非常简单的问题,但我仍然不知道我做错了什么。 这是我的问题:
我有3个课程,我们称之为A,B和C
A.H
class A
{
public:
B *b_object;
C *c_object;
}
a.cpp
A()
{
b_object = new B;
c_object = new C;
}
所以当我们创建一个对象时,我们实际上有两个对象,一个是b和c。
b.h
#include "a.h"
B类也包括a.h但我无法访问c_object形式的b_object像
c_object->do_stuff();
为什么这不起作用?我认为* c_object是在堆上创建的,通过b.h中的#include“a.h”我应该可以访问它。
提前谢谢, 森美
答案 0 :(得分:1)
您应该了解encapsulation,这是C ++和面向对象语言的一个主要特性。
由于您的c_object在A类中定义为 ,因此只能由A对象访问(除非您另行指定)。
您的b_object也在A类中,但这并不意味着它可以访问c_object。例如,让b_object成为汽车的门,而c_object是轮胎。汽车本身就是一个对象。仅仅因为汽车有门和一些轮胎并不意味着门应该能够使轮胎做一些事情。只有汽车才能进入。
答案 1 :(得分:0)
如果我没有弄错的话,你在这个问题上有循环依赖: 1)B.h包含在A.h. 2)A.h包含在B.h。
中因为A需要知道B的成员来初始化它的B指针,而B需要知道A的成员来做你想要完成的任何事情。从而创建循环依赖。
http://en.wikipedia.org/wiki/Circular_dependency
另外,仅仅因为你在B.h中包括A.h并不意味着你可以访问A的数据成员。你必须有一个现有的对象A(在B的内部)才能访问指针C.
或者您可以使B成为A的派生类,因此B将继承A的私有数据成员,然后允许您访问指针C.