Я пытаюсь static_cast объект интерфейса в объект производного класса, который наследует этот интерфейс. Я получаю сообщение об ошибкеstatic_cast интерфейс к производному классу
«static_cast»: не удается преобразовать из «IInherit *» до 'cDerived *
Производный класс и интерфейс следующего формата.
class cDerived: public IInherit
{
Repo* p_Repos;
public:
cDerived(Repo* pRepos)
{
p_Repos = pRepos;
}
Repo* GetRepo()
{
return p_Repos;
}
void doAction(ITok*& pTc)
{
///some logic
}
}
class IInherit
{
public:
virtual ~IInherit() {}
virtual void doAction(ITok*& pTc)=0;
};
У меня есть vector<IInherit*>
объект доступный в коде через getInherit() метод таким образом, что тип getInherit() [0] cDerived * Я выполняя статический бросок, используя выражение:
Repo* pRep= static_cast<cDerived*>(getInherit()[0])->GetRepo();
Я не уверен, что в качестве объекта интерфейса можно использовать static_cast. Есть ли другой способ, которым я мог бы выполнить этот актерский состав?
Какой у вас компилятор? Это [работает для меня] (http://ideone.com/ESohQ3). –
Можете ли вы представить полный пример, показывающий ошибку и полное сообщение об ошибке? – JoergB
Являются ли ** определения ** 'IInherit' и' cDerived' видимыми в точке, где происходит ошибка? –