开发者

General knowledge question regarding classes and class instances in C++

I'll start with my problem: My problem is that I'm getting a segmentation fault when I try to access a public function within an instance within a class.

Suppose I have a class A that has a bunch of class instances in it like so:

class A {
      ...

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

};

Let's consider class A to be our "global" class; that is, class A is sent to every class that I initialize and own. Therefore, every class function can call functions from class A through A->function(). Furthermore, assuming other instances have been initialized, every class can call functions of instances belonging to A, like so: A->B->function(). Up to now, everything worked great. My problem is that I'm suddenly getting a segfault when trying to access a function of one of the instances belonging to A. What I think the reason is (and why I am asking this question, because I am unsure), is that the class instance A is sent to class C before instance B has been initialized. Then in class C, I simply create a pointer copy (meaning my class C has a private instance of A called class A *A). So then when I first create an instance of class C, I send it class A and all of it's public members, which C's constructor then makes the local copy of A.

Phew. That was difficult to do without presenting code. So here's the question; say one of my class A functions contains:

C *c = new C(this);

and the constructor for C has this:

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

while also containing a private instance-pointer class A *a;

then another function in A instantiates the B class. Would my C class be able to use that开发者_如何学运维 B class? And if not (which is why I think I'm segfaulting), how could I possibly solve this issue?

Thanks!


In general your code will segfault if you dereference a pointer to an unitialized variable. From your description, this sounds like what is happening, although it's hard to tell given the lack of an example that fails.

another function in A instantiates the B class. Would my C class be able to use that B class?

Yes. This should work provided you instantianted correctly and passed the pointer to B correctly to C. Also note that it would help to get the terminology a bit more correct in the above question:

another function in A instantiates an object of the the B class. Would my C object be able to use that B object?

I believe the above is what your question really meant to say.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜