Поясните, плиз, новичку следующий вопрос.
Имеется код трех классов:
class classA
{
public:
classA()
{
printf("initial classA\n");
};
virtual ~classA()
{
printf("destruct classA\n");
};
};
class classB
{
public:
classB()
{
printf("initial classB\n");
}
virtual ~classB()
{
printf("destruct classB\n");
};
void prinf()
{
printf("test dynamic_cast\n");
}
};
class classC : public classA, classB
{
public:
classC()
{
printf("Initial classC\n");
};
virtual ~classC()
{
printf("destruct classC\n");
};
};
В проге я хочу иметь массив указателей на объекты класса classC, но при этом вариации класса classC могут быть разные. Т.е. может быть несколько классов, унаследованных от classA, classB. При этом хочу иметь возможности вызывать методы, унаследованные от обоих классов. Проблемма в том, что, когда я пытаюсь преобразовать указатель на classС к указателю на classA или classB, компилятор выдает ошибку: "dynamic_cast used to convert to inaccessible or ambiguous base; run-time test will fail ('classC *' to 'classB *')" при dynamic_cast. Вот код:
int _tmain(int argc, _TCHAR* argv[])
{
classC* pCItem = new classC();
classB* pBItem = dynamic_cast<classB*>(pCItem);
if (NULL != pBItem) pBItem->prinf();
delete pCItem;
return 0;
}
Посоветуйте, как лучше решить данную проблемму?