gpt4 book ai didi

c++ - 不能 dynamic_cast

转载 作者:行者123 更新时间:2023-11-28 06:10:32 27 4
gpt4 key购买 nike

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

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)

这是我的代码:

基类:

#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) 这样的表达式来说是不够的.需要完整的类定义。

关于c++ - 不能 dynamic_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com