c++ 11初始化列表中有多个bool的段错误
C++ 11 Segfault with several bools in initialization list
我写了一个简单的类Actor,里面有int型和很多bool型成员:
下面是actor.cpp文件的摘录
Actor::Actor ()
:X(0),Y(0),W(14),H(14),speedX(0),speedY(0)
,left(false),right(false),up(false),North(false),
East(false),South(false),West(false),NorthEast(false),
NorthWest(false),SouthEast(false),SouthWest(false){}
…
这是来自actor。h头文件
class Actor
{
private:
int X;
int Y;
unsigned short int W;
unsigned short int H;
unsigned short int speedX;
unsigned short int speedY;
bool left;
bool right;
bool up;
bool North;
bool East;
bool South;
bool West;
bool NorthEast;
bool NorthWest;
bool SouthEast;
bool SouthWest;
public:
Actor();
~Actor();
这个编译没有任何错误,
但是如果我运行这个程序,我在开始的时候就会得到一个奇怪的段错误。
现在,如果我将初始化列表中的所有bool放入注释(//,left(false))中,并让gcc编译所有内容,程序将完美运行!
怎么了?我认为最好通过初始化列表初始化所有类成员。
这可能是g++的bug吗?
我已经尝试过使用left()而不是left(false)。不:我没有在任何地方使用new-或*-操作符!
首先,"我在一开始就得到了一个奇怪的段错误"甚至不接近错误描述。所以请贴出准确的错误。也因为你说"在gcc中发现了一个bug",gcc目前是4.8版本。所以,除非你告诉你正在使用哪个编译器和哪个版本的编译器,否则调试是无用的。
第二,初始化列表是有用的,当你有继承,并希望在基类部分和/或一些成员初始化一些特殊的行为。如果类中的对象具有重构造函数和相应的重复制构造函数和operator=,那么它也很有用,在这种情况下,您可以在初始化列表中调用所需的构造函数,从而节省在构造函数代码中进行复制的时间,因为否则,首先对象将被创建,然后您将不得不进行一些初始化。
第三,对于POD类型,除非您有一些奇怪的继承问题,否则在构造函数代码中执行赋值应该是好的。
最后,http://pastebin.com/x5tuvBFw是代码,带有文件名,它在gcc4.7(我猜甚至更早的版本)上编译和运行良好
相关文章:
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误