不能 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 定义。
我在尝试编译我的代码时遇到以下错误。
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 定义。