2011-09-27 59 views
0

我将从我的问题开始: 我的问题是当我尝试访问类中某个实例的public函数时出现分段错误。有关C++中的类和类实例的常见问题

假设我有一个类A有一堆类实例的它像这样:

class A { 
     ... 

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

}; 

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

Phew。没有提交代码很难做到这一点。所以这是一个问题。说的我班A功能之一包括:

C *c = new C(this); 

C构造具有这样的:

C(A *a_val) { a = a_val; } 

,同时也包含了一个私有实例指针class A *a;

然后在A实例化另一个函数B类。我的C班级能够使用B班吗?如果没有(这就是为什么我认为我是违约的),我怎么可能解决这个问题?

谢谢!

+0

对不起,我无法提供实际的代码。这只是非常漫长,我不认为在这里粘贴数百行是必要的。 – Amit

+0

A,B和C之间是否有这种相互依存关系?我怀疑你的问题会随着一些想法和重构而消失。而且,没有代码就很难设想你的问题。如何编写一个小测试程序在这里发布? – MatthewD

+0

您可能对成员正在初始化的顺序有问题,但没有更详细的示例就不清楚。 –

回答

0

一般而言,如果将指针取消引用单位变量,则代码将会出现段错误。从你的描述来看,这听起来像是正在发生的事情,虽然很难说因为缺乏一个失败的例子。

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

是的。这应该工作只要你正确地instantianted并通过指针正确B到C另外请注意,这将有助于获得术语有点在上面的问题更正确的:

在一个另一个函数实例化的对象B类。我的C对象是 能够使用该B对象吗?

我相信以上是你的问题真正的意思。

+0

如果我在'B'实例化之前将'A'的指针传递给'C',但在实例化'B'后没有使用'A-> B-> function()'*修正指针)?那还好吗? – Amit

+0

@Amit是啊如果你在B类型的对象被实例化后告诉A这个新对象,那么事情应该没问题。尽管从描述中很难说出你想要做什么。 – sashang

+0

所以如果'A'知道了这个新的'B'对象,并且在'B'被实例化之前'A'的指针被发送到'C','C'仍然能够使用'B'?我的理解是否正确? – Amit