Cannot dynamic_cast

Cannot dynamic_cast

本文关键字:cast dynamic Cannot      更新时间:2023-10-16

在编译代码时出现以下错误:

错误!myCodeCPOI.cpp:68:41: error: cannot dynamic_cast'screenType'(类型为'struct CScreen*')转换为'struct cguisscreen *'(目标不是指向完整类型的指针或引用)

这是我的代码:

基类:

#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;这样的前向声明对于像dynamic_cast<CGUIScreen*>(screenType)这样的表达式是不够的。需要完整的类定义