c++ - 是否可以从父类“this”指针类型转换到子类
问题描述
我需要从父类成员函数访问子类变量。
我尝试对父类进行动态转换,这个指向子类的指针,但我得到以下编译错误:
> main.cpp: In member function ‘void Parent::do_something()’:
main.cpp:24:45: error: cannot dynamic_cast ‘(Parent*)this’ (of type ‘class Parent*’) to type ‘class Child*’ (target is not pointer or reference to complete type)
Child *child = dynamic_cast<Child*>(this);
有什么办法可以达到我的要求。
#include <iostream>
using namespace std;
class Child;
class Parent {
public:
Parent() {};
virtual ~Parent() {};
void do_something();
};
void Parent::do_something()
{
Child *child = dynamic_cast<Child*>(this);
child->i = 10;
}
class Child : public Parent {
public:
int i = 0;
void do_something() {}
void do_something1()
{
Parent *parent = static_cast<Child*>(this);
parent->do_something();
}
};
int main()
{
Child child;
child.do_something1();
printf ("Value of i: %d", child.i);
return 0;
}
解决方案
错误消息的重要部分是:
目标不是完整类型的指针或引用
[强调我的]
您需要类的完整定义Child
才能使其工作。
解决方案是重新排列代码,以便在类定义do_something
之后定义(实现)函数:Child
class Child : public Parent { ... };
void Parent::do_something() { ... }
推荐阅读
- docker - Docker 只在 80 端口上运行
- python-3.x - 无法为 python 面板按钮参数化操作另存为嵌入 HTML
- vue.js - 导入作用域 css
- python - 如何以优化的方式获得较低精度 geohash 的更高精度 geohash
- javascript - 即使数字不相等,如何在堆积条形图JS中设置所有相同高度的条形
- python - 由于整数错误导致列表输出中的 Python 错误
- psql - psql:警告:额外的命令行参数被忽略
- ios - Swift:调用中的参数缺少参数
- python - 有没有办法可以运行由 python 中的函数打印的代码?
- php - PHP 7.4+ 类属性类型