Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设置结构边界框值_C++_Parameters - Fatal编程技术网

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_大小)其中函数返回一种类型的边界框:)啊,我明白了。谢谢你澄清这一点。我可以让他们把它退回。看起来容易些。谢谢你的发帖。