[英]Cannot dynamic_cast
尝试编译我的代码时出现以下错误。
错误! .. \\ myCode \\ CPOI.cpp:68:41:错误:无法dynamic_cast'screenType'(类型'struct CScreen *')键入'struct CGUIScreen *'(目标不是指针或对完整类型的引用)
这是我的代码:
基类:
#include "CRoute.h"
enum screen_t{CRTScreen,GUIScreen};
class CScreen
{
protected:
CRoute* m_pRoute;
public:
virtual ~CScreen();
virtual void connecToRoute(CRoute* route) = 0;
virtual void drawRoute() = 0;
virtual screen_t getScreenType() = 0;
};
派生类:
#include "CScreen.h"
class CGUIScreen : public CScreen
{
public:
void drawRoute();
screen_t getScreenType();
void connecToRoute(CRoute* route);
};
错误:
void CPOI::print(int format, CScreen* screenType)
{
if(dynamic_cast<CGUIScreen*>(screenType))
{
cout << "printing POI GUI " << endl;
}
}
为什么会这样呢?
您没有显示足够的代码,因此只能猜测。
该错误可能是因为,在编译有问题的语句时,编译器仅具有CGUIScreen
(可能还有CScreen
)的前向声明的可见性。 解决方案是#include
定义CGUIScreen
类的头文件,因此编译器可以看到dynamic_cast
的完整类定义。
或者换句话说,像class CGUIScreen;
这样的前向声明class CGUIScreen;
对于诸如dynamic_cast<CGUIScreen*>(screenType)
这样的表达式还不够。 需要完整的类定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.