警告:在非标准布局类型'DerivedClass'上偏移
warning: offset of on non-standard-layout type 'DerivedClass'
我需要摆脱此警告。据我所知,这是因为派生频道不被视为普通旧数据。我阅读有关POD和标准布局类型的cppReference,但我仍然不明白为什么衍生流不是POD。如果我将Baseclass的成员放入派生阶级,并且不使用继承 - 那么一切都可以。我使用C 11
这是一个示例:
#include <iostream>
using namespace std;
class BaseClass
{
public:
int a;
};
class DerivedClass : public BaseClass
{
public:
int b;
};
int main(int argc, char *argv[])
{
// warning: offset of on non-standard-layout type 'DerivedClass'
int offset = offsetof(DerivedClass, b);
cout << offset;
}
我感谢任何帮助。
这些是标准布局类型的要求:
所有非静态数据成员都有相同的访问控制
没有虚拟函数或虚拟基类
没有参考类型的非静态数据成员
所有非静态数据成员和基类都是标准布局类型
直到C 14:
没有与非静态数据成员的基础类,或者
在最派生的类中没有非静态数据成员,最多有一个非静态数据成员的基类
没有与第一个非静态数据成员相同类型的基本类别(请参阅空基础优化)
此部分适用于此示例:
has no base classes with non-static data members,
在您的情况下,您有一个具有非静态数据成员的基类。删除a
删除警告。
C 14之后,有类似的限制,您不能在两个类中有成员,只有一个:
在同一类中声明了所有非静态数据成员和位字场(无论是在派生还是全部在某些基础中)
相关文章:
- 如何使用C/C++在MacOSX中获得键盘布局
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 布局兼容类型的并集
- Qt自定义QPush按钮未显示在布局上
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 调整布局上的 QGraphicsView 小部件的大小
- 如何在qt中将对象添加到现有布局中?--已解决
- 将布局映射到内存地址
- C++继承的虚拟类的内存布局
- 检查nullptr是否100%保护内存布局不受segfault影响
- C++ Python 的扩展 - 安全内存访问和内存布局
- QTree查看新行,没有布局就不可见已更改
- 类似元组的类模板的反向内存布局
- C++对象布局是否必须静态定义?
- 集合布局上的 Qt 分割错误
- QT将图像从缩略图拖放到网格布局(QVTKOpenGLWidget)?
- 更正GLSL无绑定纹理句柄中的结构布局
- POD类型是否完全等同于琐碎的标准布局类型
- 聚合类型是否意味着它也是标准布局
- 警告:在非标准布局类型'DerivedClass'上偏移