关于C ++中的类和类实例的一般知识问题

时间:2011-09-27 04:18:08

标签: c++ class pointers

我将从我的问题开始: 我的问题是,当我尝试访问类中实例中的public函数时,我遇到了分段错误。

假设我有一个类A,其中包含一堆类实例,如下所示:

class A {
      ...

    public:
        class B *B;
        class C *C;

};

让我们将班级A视为我们的“全球”班级;也就是说,类A被发送到我初始化和拥有的每个类。因此,每个类函数都可以调用类AA->function()的函数。此外,假设已初始化其他实例,每个类都可以调用属于A的实例的函数,如下所示:A->B->function()。到目前为止,一切都很好。我的问题是,在尝试访问属于A的某个实例的函数时,我突然遇到了段错误。我认为原因是(以及为什么我问这个问题,因为我不确定),是在实例A初始化之前,类实例C被发送到类B 。然后在类C中,我只创建一个指针副本(意思是我的类C有一个名为A的{​​{1}}私有实例。那么当我第一次创建类class A *A的实例时,我发送它为类C及其所有公共成员,然后A的构造函数生成{{1}的本地副本}}

呼。没有呈现代码就很难做到。所以这就是问题所在;假设我的一个C类函数包含:

A

并且A的构造函数具有:

C *c = new C(this);

同时还包含私有实例指针C

然后C(A *a_val) { a = a_val; } 中的另一个函数实例化class A *a;类。我的A课程能否使用B课程?如果没有(这就是为什么我认为我是segfaulting),我怎么可能解决这个问题呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

通常,如果取消引用指向单位化变量的指针,则代码将会出现段错误。根据你的描述,这听起来像正在发生的事情,虽然由于缺少一个失败的例子,很难说。

  

A中的另一个函数实例化B类。我的C班会不会   能够使用那个B级?

是。如果您正确实例化并将指针B正确地传递给C,这应该可以工作。另请注意,在上述问题中,这将有助于使术语更正确:

A中的另一个函数实例化B类的对象。我的C对象会是吗? 能够使用那个B对象吗?

我相信以上是您的问题的真正含义。