我在程序中创建了几个不同的结构。我现在有一个嵌套结构的结构,但我无法弄清楚如何正确初始化它们。结构如下所列。
/***POINT STRUCTURE***/
struct Point{
float x; //x coord of point
float y; //y coord of point
};
/***Bounding Box STRUCTURE***/
struct BoundingBox{
Point ymax, ymin, xmax, xmin;
};
/***PLAYER STRUCTURE***/
struct Player{
vector<float> x; //players xcoords
vector<float> y; //players ycoords
BoundingBox box;
float red,green,blue; //red, green, blue colour values
float r_leg, l_leg; //velocity of players right and left legs
int poly[3]; //number of points per polygon (3 polygons)
bool up,down;
};
然后我尝试初始化一个名为player的新创建的Player结构。
//Creates player, usings vectors copy and iterator constructors
Player player = {
vector<float>(xcords,xcords + (sizeof(xcords) / sizeof(float)) ), //xcords of player
vector<float>(ycords,ycords + (sizeof(ycords) / sizeof(float)) ), //ycoords of playe
box.ymax = 5; //create bounding box
box.ymin = 1;
box.xmax = 5;
box.xmin = 1;
1,1,1, //red, green, blue
0.0f,0.0f, //r_leg,l_leg
{4,4,4}, //number points per polygon
true,false}; //up, down
这导致几个不同的错误,涉及框。在'。'之前说明该框没有明确的标识符和缺少的结构或语法。
然后我尝试创建一个Player结构并按如下方式初始化它的成员:
Player bob;
bob.r_leg = 1;
但这会导致更多错误,因为编译器认为bob没有标识符或缺少某些语法。
我用Google搜索了问题,但我没有找到任何文章向我展示如何在(父)结构中初始化嵌套结构的许多不同成员。任何关于这个主题的帮助将不胜感激:-) !!!
答案 0 :(得分:19)
您使用{ ... }
正常初始化它:
Player player = {
vector<float>(xcords,xcords + (sizeof(xcords) / sizeof(float)) ),
vector<float>(ycords,ycords + (sizeof(ycords) / sizeof(float)) ),
5, 1, 5, 1, 5, 1, 5, 1,
1.0f,1.0f,1.0f, //red, green, blue
0.0f,0.0f, //r_leg,l_leg
{4,4,4}, //number points per polygon
true,false
};
现在,那是使用“大括号”。一些编译器警告说,即使它是完全标准的,因为它可能会使读者感到困惑。更好的是你添加大括号,因此很清楚在哪里初始化:
Player player = {
vector<float>(xcords,xcords + (sizeof(xcords) / sizeof(float)) ),
vector<float>(ycords,ycords + (sizeof(ycords) / sizeof(float)) ),
{ { 5, 1 }, { 5, 1 }, { 5, 1 }, { 5, 1 } },
1.0f, 1.0f, 1.0f, //red, green, blue
0.0f, 0.0f, //r_leg,l_leg
{ 4, 4, 4 }, //number points per polygon
true, false
};
如果您只想初始化点的x
成员,可以省略其他初始值设定项。聚合(数组,结构)中的剩余元素将被初始化为“正确”值 - 因此,指针为NULL
,bool为false
,整数为零,依此类推,并使用用户定义类型的构造函数,粗略。初始化点的行看起来像这样
{ { 5 }, { 5 }, { 5 }, { 5 } },
现在你可以看到使用大括号的危险了。如果向结构中添加一些成员,则所有初始化程序都会“拆分”它们应该初始化的实际元素,并且它们可能会意外地触及其他元素。所以你最好总是在适当的地方使用牙箍。
考虑使用构造函数。我刚刚完成了代码,显示了如何使用大括号括起来的初始化程序。
答案 1 :(得分:4)
您可以将默认值添加到结构中,如下所示:
struct Point{
Point() : x(0), y(0)
{ };
float x;
float y;
};
或
struct Point{
Point()
{
x = 0;
y = 0;
};
float x;
float y;
};
要在构造期间添加这些值,请向构造函数添加参数,如下所示:
struct Point{
Point(float x, float y)
{
this->x = x;
this->y = y;
};
float x;
float y;
};
并用以下方法实例化它们:
Point Pos(10, 10);
Point *Pos = new Point(10, 10);
这也适用于您的其他数据结构。
答案 2 :(得分:2)
看起来边界框应该只包含浮点数,而不是点数?
那说这可能有用:
Player player = {
vector<float>(xcords,xcords + (sizeof(xcords) / sizeof(float)) ), //xcords of player
vector<float>(ycords,ycords + (sizeof(ycords) / sizeof(float)) ), //ycoords of playe
{{1.0,5.0},{1.0,5.0},{1.0,5.0},{1.0,5.0}},
1,1,1, //red, green, blue
0.0f,0.0f, //r_leg,l_leg
{4,4,4}, //number points per polygon
true,false};
(未测试)...