C++ 设置结构边界框值
我试图在我拥有的一些对象周围创建一些边界框 我这样创建它们:C++ 设置结构边界框值,c++,parameters,C++,Parameters,我试图在我拥有的一些对象周围创建一些边界框 我这样创建它们: struct boundingBox{ float top; float bottom; float left; float right; }; makeBoundingBox(car,b_Size,b_Size,b_Size,b_Size); //where car is a boundingBox object and b_Size is a calculated box size 我在设定他们
struct boundingBox{
float top;
float bottom;
float left;
float right;
};
makeBoundingBox(car,b_Size,b_Size,b_Size,b_Size); //where car is a boundingBox object and b_Size is a calculated box size
我在设定他们的价值观方面遇到了问题。我有一个函数,我希望它能设定它们的值:
void makeBoundingBox(boundingBox bound, float t, float b, float l, float r){
bound.top =t;
bound.bottom =b;
bound.left=l;
bound.right=r;
}
我试着把它们设置成这样:
struct boundingBox{
float top;
float bottom;
float left;
float right;
};
makeBoundingBox(car,b_Size,b_Size,b_Size,b_Size); //where car is a boundingBox object and b_Size is a calculated box size
当我使用上面的行时,没有设置值;我知道这一点,因为我打印到控制台来检查值,它们总是返回0
。但是,如果在同一函数中我使用makeBoundingBox
,我会手动设置car.top=500
,然后打印,car.top
会成功设置为500并工作
makeBoundingBox
方法通过传递struct对象(我也希望如此)是否不能正常工作?您传递的是boundingBox
值,而不是引用。这意味着makeBoundingBox
函数正在本地副本上运行,并且更改不会传播回原始对象
按如下方式更改函数定义:
void makeBoundingBox(boundingBox& bound, float t, float b, float l, float r)
您正在通过值传递
边界框,而不是通过引用。这意味着makeBoundingBox
函数正在本地副本上运行,并且更改不会传播回原始对象
按如下方式更改函数定义:
void makeBoundingBox(boundingBox& bound, float t, float b, float l, float r)
如果要按值将结构传递给函数,则需要按引用传递,以便:
void makeBoundingBox(boundingBox &bound, float t, float b, float l, float r){
bound.top =t;
bound.bottom =b;
bound.left=l;
bound.right=r;
}
请注意&通过引用传递
在函数调用中,在变量名前面执行相同的操作。如果要按值将结构传递给函数,则需要按引用传递,以便:
void makeBoundingBox(boundingBox &bound, float t, float b, float l, float r){
bound.top =t;
bound.bottom =b;
bound.left=l;
bound.right=r;
}
请注意&通过引用传递
在函数调用中,在变量名前面执行相同的操作。您正在按值传递框。对于要更改实际参数的例程,请通过引用传递它。即
void makeBoundingBox(boundingBox& bound, float t, float b, float l, float r){
bound.top =t;
bound.bottom =b;
bound.left=l;
bound.right=r;
}
然而,在C++11中,只需编写
boundingBox{ 1, 1, 10, 10 }
当您需要带有这些值的边界框时
在C++03中,您可以为boundingBox
类定义构造函数
<>阅读你喜欢的C++课本中的那个。< /P>
下面是一个示例类定义:
struct boundingBox{
float top;
float bottom;
float left;
float right;
boundingBox( float a_top, float a_bottom, float a_left, float a_right )
: top( a_top ), bottom( a_bottom )
, left( a_left ), right( a_right )
{}
};
然后您可以创建一个实例,如
boundingBox( 1, 1, 10, 10 )
一般来说,使用float
而不是double
可能会产生一些问题(特别是在C++11花括号初始化时),它的精度不如double
,并且除了需要数以十亿计的值之外,它没有什么特别的优势
因此,请使用双倍密码
这是C++中的默认浮点类型,例如是<代码> 3.14 < /C> >的类型。
< p>按值传递框。对于要更改实际参数的例程,请通过引用传递它。即
void makeBoundingBox(boundingBox& bound, float t, float b, float l, float r){
bound.top =t;
bound.bottom =b;
bound.left=l;
bound.right=r;
}
然而,在C++11中,只需编写
boundingBox{ 1, 1, 10, 10 }
当您需要带有这些值的边界框时
在C++03中,您可以为boundingBox
类定义构造函数
<>阅读你喜欢的C++课本中的那个。< /P>
下面是一个示例类定义:
struct boundingBox{
float top;
float bottom;
float left;
float right;
boundingBox( float a_top, float a_bottom, float a_left, float a_right )
: top( a_top ), bottom( a_bottom )
, left( a_left ), right( a_right )
{}
};
然后您可以创建一个实例,如
boundingBox( 1, 1, 10, 10 )
一般来说,使用float
而不是double
可能会产生一些问题(特别是在C++11花括号初始化时),它的精度不如double
,并且除了需要数以十亿计的值之外,它没有什么特别的优势
因此,请使用双倍密码
这是C++中的默认浮点类型,例如,是<代码> 3.14版/代码>的类型。
现在我感觉很傻。谢谢你抽出时间提醒我。回答得很好。问题解决了。谢谢你的发帖。我现在觉得很傻。谢谢你抽出时间提醒我。回答得很好。问题解决了。感谢您的发布。或者您可以始终返回结构而不是void:car=makeBoundingBox(b_大小,b_大小,b_大小,b_大小)代码>boundingBox makeBoundingBox(float t,float b,float l,float r){boundingBox-bound;bound.top=t;bound.bottom=b;bound.left=l;bound.right=r;return-bound;}
返回时使用的语法是什么?在函数上键入boundingBox返回,并将返回值赋给car,而不只是调用函数。正如我在上面发布的那样,car=makeBoundingBox(b_大小,b_大小,b_大小,b_大小)代码>其中函数返回一种类型的边界框:)啊,我明白了。谢谢你澄清这一点。我可以让他们把它退回。看起来容易些。感谢您的发布。或者您可以始终返回结构而不是void:car=makeBoundingBox(b_大小,b_大小,b_大小,b_大小)代码>boundingBox makeBoundingBox(float t,float b,float l,float r){boundingBox-bound;bound.top=t;bound.bottom=b;bound.left=l;bound.right=r;return-bound;}
返回时使用的语法是什么?在函数上键入boundingBox返回,并将返回值赋给car,而不只是调用函数。正如我在上面发布的那样,car=makeBoundingBox(b_大小,b_大小,b_大小,b_大小)代码>其中函数返回一种类型的边界框:)啊,我明白了。谢谢你澄清这一点。我可以让他们把它退回。看起来容易些。谢谢你的发帖。