首页 > 解决方案 > 是否可以从父类“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;
}

标签: c++c++11c++14

解决方案


错误消息的重要部分是:

目标不是完整类型的指针或引用

[强调我的]

您需要类的完整定义Child才能使其工作。

解决方案是重新排列代码,以便在类定义do_something之后定义(实现)函数:Child

class Child : public Parent { ... };

void Parent::do_something() { ... }

推荐阅读