0
votes

edit: nevermind, solved...I'd declared type in ClassB AND ClassC....

So I have a pointer, named PointA, in a class called ClassA.

ClassA and ClassB are both derived from ClassC, which has a variable called type.

In a section of code I assign a new instance of ClassB to ClassA's PointA variable. The pointer is declared to point to ClassC, of which ClassB is derived from.

I then have a function, in OtherClass (irrelevant), that looks a bit like this:

void OtherClass::function_name(ClassA* A,ClassB* B) {
    B->type; //displays the correct value of type

    A->PointA->type; //displays the wrong value of type
    (A->PointA)->type; //displays the wrong value of type
}

I know that PointA points correctly to the instance of ClassB.

What am I doing wrong to get the incorrect value of type when I use the pointer?

2
How are ClassA and ClassB related? You should post all the code, including class definitions. - Jim Buck
Did you try A->PointA->type? - Frédéric Hamidi
You didn't post nearly enough code. Please see sscce.org - David Grayson
I've also added some more code... - Matthew

2 Answers

0
votes

I suspect you did an illegal cast when populating PointA. ClassB needs to be a subclass of the thing that PointA is defined to point to ( typeof(*ClassA->PointA) ) or else what you are trying to do will not work.

0
votes

According to your code, both ClassA and ClassB have a member named type. Since you can make your PointA point to either ClassA object or ClassB object, there must be a parent-child relationship between these classes (is there?). If so, are you sure that you did not create two completely unrelated type members: one in ClassA and another in ClassB? You expect to inspect ClassB::type, but in fact you inspect ClassA::type, which is why you see a different ("wrong") value.

You need to post more code, to show us how the classes are declared. With what you posted one can only make wild guesses... On top of that, the code you posted is obviously "fake", i.e. it is not the code you made your experiments with. The ClassA->PointA->type expression will not even compile. Post real code.