在下面的代码中,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 注意到这一点。因为它正在标记错误,所以我什至从未想过要编译它。将来会记住这一点。