禁止从子类型强制转换为父类型
Static cast disallowed for cast from child to parent
在下面的代码中,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注意到这一点。因为它标记了一个错误,我甚至没有想过编译它。以后会记住的。
干杯!
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 事件系统:使用类型转换或联合进行继承
- 如何在参数中定义隐式类型转换的构造函数?
- 类模板实例化中的类型转换