设置结构边界框值

时间:2013-12-09 02:41:28

标签: c++ parameters

我正在尝试在我拥有的某些对象周围创建一些边界框。

我像这样创建它们:

struct boundingBox{
    float top;
    float bottom;
    float left;
    float right;
};

我在设置他们的价值时遇到了问题。我有这个函数,我希望能设置它们的值:

void makeBoundingBox(boundingBox bound, float t, float b, float l, float r){
    bound.top =t;
    bound.bottom =b;
    bound.left=l;
    bound.right=r;
}

我试图像这样设置它们:

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对象无法正常工作?

3 个答案:

答案 0 :(得分:1)

您按值传递boundingBox,而不是按引用传递。这意味着makeBoundingBox函数在本地副本上运行,并且更改不会传播回原始对象。

按如下方式更改您的功能定义:

void makeBoundingBox(boundingBox& bound, float t, float b, float l, float r)

答案 1 :(得分:1)

您正在通过VALUE将结构传递给函数,您需要通过REFERENCE传递:

void makeBoundingBox(boundingBox &bound, float t, float b, float l, float r){
    bound.top =t;
    bound.bottom =b;
    bound.left=l;
    bound.right=r;
}

注意&通过引用传递。

在你的函数调用中,执行相同的操作。在变量名称前面。

答案 2 :(得分:1)

您按值传递了该框。对于更改实际参数的例程,将其通过引用传递 。即。

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 }

当您需要boundingBox这些值时。


在C ++ 03中,您可以为boundingBox类定义构造函数

在您最喜爱的C ++教科书中阅读。

以下是一个示例类定义:

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,并且没有什么特别的优势,除非你需要数以万计的价值,如几十亿。

因此,请使用 double

这是C ++中的默认浮点类型,例如它是3.14的类型。