通过初始化列表或变量推回结构数组
push back an array of struct by initialization list or variable
我在结构初始化时遇到了一个奇怪的问题。我猜这是一个编码错误,但它会导致编译器的内部分段错误。
我的 gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)(抱歉无法更改)
我用 -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 的文章,但我不明白背后的线索。
希望你有一个想法。
啊,我猜你想要一些错误信息?
我把它们放在一个 pastebin 里(希望没问题)
http://pastebin.com/ZaJ5wV8Y
您不能将原始 C 数组存储在 std 容器中。数组的行为不够像常规值,因为它们无法从函数返回,并且它们倾向于衰减为指针等。
使用更像值的 std::array<coordinate_t,2>
。
您还可以将结构包装在 class 中,然后将坐标分配给 class 构造函数。
#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)) ;
}
我在结构初始化时遇到了一个奇怪的问题。我猜这是一个编码错误,但它会导致编译器的内部分段错误。 我的 gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)(抱歉无法更改) 我用 -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 的文章,但我不明白背后的线索。 希望你有一个想法。
啊,我猜你想要一些错误信息? 我把它们放在一个 pastebin 里(希望没问题) http://pastebin.com/ZaJ5wV8Y
您不能将原始 C 数组存储在 std 容器中。数组的行为不够像常规值,因为它们无法从函数返回,并且它们倾向于衰减为指针等。
使用更像值的 std::array<coordinate_t,2>
。
您还可以将结构包装在 class 中,然后将坐标分配给 class 构造函数。
#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)) ;
}