通过初始化列表或变量推回一个struct数组

时间:2015-03-31 10:44:11

标签: c++ arrays struct segmentation-fault stdvector

我的struct初始化有一个奇怪的问题。我想这是一个编码错误,但它会导致编译器的内部分段错误。 我的gcc版本4.6.3(Ubuntu / Linaro 4.6.3-1ubuntu5)(sry不能改变) 我用-std = c ++ 0x

编译

我的结构看起来像:

typedef struct{
    int x;
    int y;
} coordinate_t;

我的配置对象有一个成员 std::vector< coordinate_t[2] > wall_coord;

我希望通过

添加矢量入口
this->wall_coord.push_back({ coordinate_t{0,2}, coordinate_t{0,6} });

我也试过

this->wall_coord.push_back(coordinate_t[2]{ {0,2}, {0,6} });

但这导致了一堆错误,所以我想,坚持下去,走很长的路:

coordinate_t coord[2]={ coordinate_t{0,2}, coordinate_t{2,0} };
this->wall_coord.push_back( coord );

但是,bam,只是另一堆错误。我知道他通过分配存储或类似的东西有问题。 我读了几篇关于push_back的文章,但我不知道这背后的线索。 希望你有个主意。


你想要一些errormsg啊? 我把它们放在一个pastebin中(希望没关系) http://pastebin.com/ZaJ5wV8Y

2 个答案:

答案 0 :(得分:2)

您无法将原始C数组存储在std容器中。数组的行为不像常规值,因为它们无法从函数返回,而且它们倾向于衰减指针等。

使用std::array<coordinate_t,2>,其行为更像一个值。

答案 1 :(得分:0)

您也可以将结构包装在一个类中,然后将您的坐标分配给类构造函数。

#include <vector>


class WallCoordinates{

struct{int y,x;} coord[2];

public:

  WallCoordinates(int _y1 = 0, int _x1 = 0,int _y2 = 0, int _x2 = 0){

    coord[0].y = _y1 ;
    coord[0].x = _x1 ;
    coord[1].y = _y2 ; 
    coord[1].x = _x2 ; 
      }

};


std::vector<WallCoordinates> wall_coord ;

int main () {
  wall_coord.push_back(WallCoordinates(1,2,3,4)) ;
}