尝试编译代码时出现以下错误。
ERROR! .. \ 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;
}
}
为什么会这样?
答案 0 :(得分:1)
您没有显示足够的代码,因此只能猜测。
错误可能是因为,在编译违规语句时,编译器只能看到CGUIScreen
(也可能是CScreen
)的前向声明。解决方案是#include
定义CGUIScreen
类的头文件,因此编译器可以看到dynamic_cast
的完整类定义。
或者,换句话说,像class CGUIScreen;
之类的前向声明对dynamic_cast<CGUIScreen*>(screenType)
之类的表达式来说还不够。需要完整的类定义。