禁止从子类型强制转换为父类型

Static cast disallowed for cast from child to parent

本文关键字:类型 转换 父类 禁止      更新时间:2023-10-16

在下面的代码中,vc++ IDE标记静态强制转换,提示"错误:无效类型转换"。但我确实不明白为什么。我本以为将指向子对象的指针转换为指向父对象的指针总是安全的。有人能帮我理解一下吗?

#include <stdio.h>
class Child : public Parent
{
public:
    void m();
};
class Parent
{
};
void Child::m()
{
    Parent* p1 = (Parent*)this;
    Parent* p2 = static_cast<Parent*>(this);
}

谢谢阿尔夫。

修复方法是重新排序,使子类定义遵循其父类定义:

#include <stdio.h>
class Parent
{
};
class Child : public Parent
{
public:
    void m();
};
void Child::m()
{
    Parent* p1 = (Parent*)this;
    Parent* p2 = static_cast<Parent*>(this);
}

我的错误的原因(或者,"借口",如果你喜欢的话)是我主要用Java编程,没有做过足够的c++来记住我的基础知识。下面Java中大致类似的代码确实可以工作。

public class Main
{
    public static void main(String[] args)
    {
        Child c = new Child();
    }
}
class Child extends Parent
{
    public void m()
    {
        Parent p = this;
    }
}
class Parent
{
}
我很感激你的帮助。有点困惑,我必须编译它来获得真正重要的错误消息。人们会期望IDE注意到这一点。因为它标记了一个错误,我甚至没有想过编译它。以后会记住的。

干杯!