Привидение типов
От: patriotyk  
Дата: 17.05.06 09:41
Оценка:
У меня проблема c виртуальным наследованием:
#include "stdafx.h"
class A {
};

class B : public virtual A {
};


int _tmain(int argc, _TCHAR* argv[])
{
    B *b;
    A *pa=b;
    b = (B*) pa;
    return 0;
}


error C2635: cannot convert a 'A*' to a 'B*'; conversion from a virtual base class is implied

Если забрать virtual то все роботает, помогите, как мне привести типы?????????
Добавлена раскраска кода — Кодт
Re: Привидение типов
От: Greg Zubankov СССР  
Дата: 17.05.06 09:53
Оценка: 6 (1)
Здравствуйте, patriotyk, Вы писали:

P>У меня проблема c виртуальным наследованием:


Такое преобразование невозможно. Стандарт 5.2.9/5

An lvalue of type “cv1 B”, where B is a class type, can be cast to type “reference to cv2 D”, where D is a
class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists
(4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base
class of D
.


Еcли бы класс A имел виртуальные функции, для подобного преобразования можно было бы воспользоваться dynamic_cast.
Re: Привидение типов
От: Bell Россия  
Дата: 17.05.06 09:56
Оценка:
Здравствуйте, patriotyk, Вы писали:

P>Если забрать virtual то все роботает, помогите, как мне привести типы?????????


dynamic_cast тебе поможет. Только А должен быть полиморфным.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Привидение типов
От: patriotyk  
Дата: 17.05.06 10:15
Оценка:
Дякую, с dynamic_cast все вышло.
Re: Привидение типов
От: Аноним  
Дата: 22.05.06 22:45
Оценка:
сцуко, учи разметку!

Здравствуйте, patriotyk, Вы писали:

P>У меня проблема c виртуальным наследованием:


P>#include "stdafx.h"

P>class A {
P>};

P>class B : public virtual A {

P>};


P>int _tmain(int argc, _TCHAR* argv[])

P>{
P> B *b;
P> A *pa=b;
P> b = (B*) pa;
P> return 0;
P>}


P>error C2635: cannot convert a 'A*' to a 'B*'; conversion from a virtual base class is implied


P>Если забрать virtual то все роботает, помогите, как мне привести типы?????????
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.