У меня есть два классаC++ Реферирование внутри полиморфного объекта
class A { C* c; }
class B { D* d; }
и найти мне нужно построить зЬй :: вектор, элементы которого являются либо А, либо В (с последовательностью решили во время выполнения. Так что я построил Полиморфный
class Poly {
int oType;
void* oPtr;
}
, а также конструктор
Poly::Poly(int type)
{
if (type == 1) oPtr = new (A*) oPtr();
if (type == 2) oPtr = new (B*) oPtr();
oType = type;
}
наряду с аналогичным структурированы деструктор. В настоящее время
std::vector<Poly*> test;
работает. Однако у меня возникают проблемы с доступом к подобъектам.
Я попытался
if (test->oType == 1) test->oPtr->a;
if (test->oType == 1) test->(A*)oPtr->a;
if (test->oType == 1) (A*)(test->oPtr)->a;
все дает мне ошибку компилятора:
«пустота *» не является указатель на объект типа
Как убедить компилятор, что OK для ссылки a, если я знаю, что тип oPtr - A *?
'если (тест-> oType == 1) ((A *) тест-> OPTR) -> c' – nwp
Почему вы используете' 'вектор и' 'вектор ? –
nwp
В C++ полиморфизм обычно выражается путем наследования от общего базового класса. Затем обычно пытаются решить проблему выбора типа объекта, используя виртуальные методы, а не традиционные конструкции «if/then». – Galik