gpt4 book ai didi

c++ - 动态类型转换的局限性是什么?

转载 作者:行者123 更新时间:2023-11-30 03:29:13 26 4
gpt4 key购买 nike

我需要在我的程序中使用转换。我在我的代码标题中,在我的基类中

scSupervisor* msSupervisor;    ///< My Supervisor

我想在同一个头文件中的派生类中创建一个访问器函数

Supervisor* Supervisor_Get(void){ return (Supervisor*)msSupervisor;}
//dynamic_cast<Supervisor*>(msSupervisor);}

如图所示,静态转换编译并运行良好。但是,如果我更改为动态转换版本(显示为注释),则会收到错误消息:

cannot dynamic_cast '((Core*)this)->Core::<anonymous>.scCore::msSupervisor' (of type 'class scSupervisor*') to type 'class Supervisor*' (target is not pointer or reference to complete type)
dynamic_cast<Supervisor*>(msSupervisor);}
^

在我眼里,它就是一个指针。我做了违法的事吗?

最佳答案

尽管dynamic_cast<T>有多个限制,与您的情况相关的限制在 C++ 标准的第 5.2.7.1 节中进行了描述:

The result of the expression dynamic_cast<T>(v) is the result of converting the expression v to type T. T shall be a pointer or reference to a complete class type, or “pointer to cv void.”

请注意上面描述中类类型完整的要求。

在你的例子中,TSupervisor* , 根据错误消息,它不是指向完整类的指针(即指向已向前声明但未完全指定的类的指针)。

包含 Supervisor 的头文件将解决此问题。

关于c++ - 动态类型转换的局限性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45881213/

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