c++ - 从 child 到 parent 的转换不允许静态转换

标签 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);
}

最佳答案

谢谢阿尔夫。

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

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

干杯!

关于c++ - 从 child 到 parent 的转换不允许静态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23770187/

相关文章:

c++ - 如何在 C++ 中将 x64 机器代码写入虚拟内存并在 Windows 中执行

c++ - 内部编译器错误,同时使用 boost spirit x3

使用 Qt 库的 C++ 应用程序在屏幕保护程序启动时停止工作

c++ - ld : symbol(s) not found for architecture i386 IOS c++

c++ - 弄清楚我对指针和引用的概念

c++ - C++中的字符串连接问题

c++ - STL 容器元素销毁顺序

c++ - gcc编译器在两台服务器上的链接不同

C++ typedef union 编译错误

c++ - 像素绘图库