source type is not polymorphic
时间: 2023-12-14 08:02:54 浏览: 24
在 C++ 中,source type is not polymorphic 是一个编译错误,表示源类型不是多态类型。多态类型是指至少包含一个虚函数的类型,通过基类指针或引用可以访问其派生类对象的成员函数。如果源类型不是多态类型,那么无法使用 dynamic_cast 将其指针或引用转换为派生类指针或引用。
例如,下面的代码会出现 source type is not polymorphic 错误:
```
class Base {
public:
void func() {
cout << "This is Base class" << endl;
}
};
class Sub : public Base {
public:
void sub_func() {
cout << "This is Sub class special function" << endl;
}
};
int main() {
Base base_obj;
Sub *sub_ptr = dynamic_cast<Sub*>(&base_obj); // 错误:source type is not polymorphic
return 0;
}
```
因为 Base 类中没有虚函数,所以 Base 类不是多态类型,无法进行 dynamic_cast 转换。解决该错误的方法是在 Base 类中添加虚函数,将其变成多态类型。例如:
```
class Base {
public:
virtual void func() {
cout << "This is Base class" << endl;
}
};
class Sub : public Base {
public:
void sub_func() {
cout << "This is Sub class special function" << endl;
}
};
int main() {
Sub sub_obj;
Base *base_ptr = &sub_obj;
Sub *sub_ptr = dynamic_cast<Sub*>(base_ptr); // 正确:进行子类向下转型
if (sub_ptr != nullptr) {
sub_ptr->sub_func(); // 输出:This is Sub class special function
}
return 0;
}
```
在 Base 类中添加了虚函数 func,将其变成多态类型,可以正确进行 dynamic_cast 转换。