通过初始化列表或变量推回结构的数组



我在初始化结构时遇到了一个奇怪的问题。我想这是一个编码错误,但它会导致编译器的内部分段错误。我的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 );

但是,砰,又是一堆错误。我知道他在分配存储空间或诸如此类的事情上有问题。我读了几篇关于push_back的文章,但我不知道背后的线索。希望你有个主意。


啊,我想你想要一些错误消息吗?我把它们放在粉盒里(希望没关系)http://pastebin.com/ZaJ5wV8Y

不能将原始C数组存储在std容器中。数组的行为不像常规值,无法从函数中返回,并且有衰减为指针等的趋势。

使用行为更像值的std::array<coordinate_t,2>

您还可以将结构封装在类中,然后将坐标分配给类构造函数。

#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)) ;
}

相关内容

  • 没有找到相关文章

最新更新