class BASE {
public:
virtual ~BASE() {}
void lamp() {
cout << "\nBASE CLASS";
}
};
class DERIVED : public BASE {
public:
void fun();
};
void DERIVED::fun() {
cout << "\nDERIVED CLASS!";
}
int main() {
BASE * pbase = new DERIVED; //BASE CLASS POINTER
void * vbase = pbase; //VOID POINTER TAKING BASE POINTER
DERIVED * pder; //DERIVED CLASS POINTER
//pder = static_cast<DERIVED *>(vbase); //THIS WORKS
pder = dynamic_cast<DERIVED *>(vbase); //THIS DOESN'T
pder->lamp();
pder->fun();
return 0;
}
每当我尝试将
void*
指针动态转换为派生类指针时,就会出现以下错误:我在StackOverflow上搜索并遵循建议,在基类中实现了虚函数以避免错误。我做错了什么?这种情况是否可能?无法将'type 'void*'的'vbase'动态转换为'type 'class DERIVED*'(源不是指向类的指针)
我的总体意图是使用
void*
指针将任何传入的对象类型转换为Derived类类型。我希望你能理解我的意思。例如:
void dynamicCast(void * vptr)
{
BASE * pbase = new DERIVED;
DERIVED * pder;
pder = dynamic_cast<DERIVED *>(vbase);
}
我应该能够将任何类型的指针传递给dynamicCast
函数,并且它应该转换为派生类指针。