不能 dynamic_cast

Cannot dynamic_cast

我在尝试编译我的代码时遇到以下错误。

ERROR! ..\myCode\CPOI.cpp:68:41: error: cannot dynamic_cast 'screenType' (of type 'struct CScreen*') to type 'struct CGUIScreen*' (target is not pointer or reference to complete type)

这是我的代码:

基础class:

#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;
};

派生 class:

#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 class 的头文件,因此编译器可以看到 dynamic_cast.[= 的完整 class 定义。 17=]

或者,换句话说,像class CGUIScreen;这样的前向声明对于像dynamic_cast<CGUIScreen*>(screenType)这样的表达式来说是不够的。需要完整的 class 定义。