Cannot dynamic_cast
Cannot dynamic_cast
在编译代码时出现以下错误:
错误!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)
这样的表达式是不够的。需要完整的类定义
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- C++类中的二维"dynamic"数组?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- protobuf in C++ with dynamic binding for google::protobuf::M
- 警告的原因是什么:"when type is in parentheses, array cannot have dynamic size"?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- "The ordinal 344 could not be located in the dynamic link library"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- Dynamic Cast C++ Fail
- dynamic-cast-c++dynamic_cast错误处理