对于从子级到父级的强制转换,不允许使用Static_cast

时间:2014-05-20 21:21:11

标签: c++

在下面的代码中,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);
}

1 个答案:

答案 0 :(得分:2)

谢谢Alf。

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

#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);
}

我错误的原因(或者,#34;借口,#34;如果你愿意的话)是我主要用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注意到这一点。因为它标记了一个错误,我甚至都没想过要编译它。将记住未来。

干杯!