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.
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.