Простой вопрос с указателем - PullRequest
0 голосов
/ 15 августа 2011

edit : неважно, решено ... Я объявил тип ClassB AND ClassC ....

Итак, у меня есть указатель с именем PointA в классе с именем ClassA .

ClassA и ClassB оба получены из ClassC , в котором есть переменная с именем type .

В разделе кода я назначаю новый экземпляр ClassB переменной ClassA PointA . Указатель объявляется для указания на ClassC , из которого ClassB является производным от.

У меня есть функция в OtherClass (не имеет значения), которая выглядит примерно так:

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
}

Я знаю, что PointA правильно указывает на экземпляр ClassB .

Что я делаю не так, чтобы получить неправильное значение типа при использовании указателя?

Ответы [ 2 ]

0 голосов
/ 15 августа 2011

Согласно вашему коду, ClassA и ClassB имеют члена с именем type. Поскольку вы можете указать PointA для объекта ClassA или ClassB, между этими классами должны быть отношения родитель-потомок (есть?). Если да, то уверены ли вы, что не создали двух совершенно не связанных type членов: один в ClassA, а другой в ClassB? Вы ожидаете проверить ClassB::type, но на самом деле вы проверяете ClassA::type, поэтому вы видите другое («неправильное») значение.

Вам нужно опубликовать больше кода, чтобы показать нам, как объявлены классы. С тем, что вы разместили, можно только делать дикие предположения ... Кроме того, код, который вы разместили, явно «фальшивый», то есть это не тот код, с которым вы экспериментировали. Выражение ClassA->PointA->type даже не скомпилируется. Разместите реальный код.

0 голосов
/ 15 августа 2011

Я подозреваю, что вы произвели незаконное приведение при заполнении PointA. ClassB должен быть подклассом вещи, на которую определено PointA (typeof (* ClassA-> PointA)), иначе то, что вы пытаетесь сделать, не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...