0

Я хочу, чтобы объект hlaObj для HlaObject из RtiValueAggregate, но он не работает ...! Наследования между двумя классами нет. и HlaObject фактически получен из RtiValue. может кто-нибудь сказать мне что-то не так в следующем коде: Спасибо!Тип объекта литья для объекта дочернего класса

class RtiValue; 
class HlaObject; 

class RtiValueAggregate 
{ 
public: 
    friend class RtiValue; 
    int w; 

    RtiValueAggregate() : w(10) 
    {   
    } 

}; 


class RtiValue 
{ 
public: 
    friend class RtiValueAggregate; 

    RtiValue() 
    { 
     int x = 5; 
     pAggregate_ = new RtiValueAggregate(); 
    } 

    RtiValueAggregate* getAggregate() const 
    { 
     return pAggregate_; 
    } 

private: 
    RtiValueAggregate* pAggregate_; 
}; 


class ObjectAttribute : public RtiValue 
{ 
public: 
    int v; 

    ObjectAttribute() : v(0) 
    { 
     RtiValue(); 
    }   

}; 


class HlaObject :public virtual RtiValueAggregate 
{ 
public: 
    int a; 
    ObjectAttribute* ptrV; 

    HlaObject() : a(1) 
    { 
     ptrV = new ObjectAttribute(); 
    } 

}; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    RtiValue *rtiVal = new RtiValue(); 
    RtiValueAggregate* rtiValueAggr = rtiVal->getAggregate(); 
    HlaObject *hlaObj = reinterpret_cast<HlaObject*>(rtiValueAggr); 

    cout << "Press any key to exit..." << endl; 
    cin.get(); 
    return 0; 
} 
+0

'это не working'. Посмотрите на сообщения об ошибках, они должны сказать вам, что не так. –

+0

Какой строитель вы используете? Я построил его с помощью 'g ++', и никакая ошибка не сбрасывается. С другой стороны, вы используете множественное наследование в другой части кода? В противном случае я не вижу необходимости использовать виртуальное наследование. – jcm

ответ

0

Использование dynamic_cast, никогда не используйте reinterpret_cast.

Кстати, почему делают:

class HlaObject :public virtual RtiValueAggregate 

И не:

class HlaObject :public RtiValueAggregate 
Смежные вопросы