我将从我的问题开始:
我的问题是,当我尝试访问类中实例中的public
函数时,我遇到了分段错误。
假设我有一个类A
,其中包含一堆类实例,如下所示:
class A {
...
public:
class B *B;
class C *C;
};
让我们将班级A
视为我们的“全球”班级;也就是说,类A
被发送到我初始化和拥有的每个类。因此,每个类函数都可以调用类A
到A->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),我怎么可能解决这个问题呢?
谢谢!
答案 0 :(得分:0)
通常,如果取消引用指向单位化变量的指针,则代码将会出现段错误。根据你的描述,这听起来像正在发生的事情,虽然由于缺少一个失败的例子,很难说。
A中的另一个函数实例化B类。我的C班会不会 能够使用那个B级?
是。如果您正确实例化并将指针B正确地传递给C,这应该可以工作。另请注意,在上述问题中,这将有助于使术语更正确:
A中的另一个函数实例化B类的对象。我的C对象会是吗? 能够使用那个B对象吗?
我相信以上是您的问题的真正含义。