繁体   English   中英

无法dynamic_cast

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM