我正在调用一个返回CvBox2D类型结构的函数,但是我想检查函数中的错误,如果有错误则返回NULL。
CvBox2D function()
{
...
if(ERROR)
return NULL;
...
}
我收到错误:无法从'int'转换为'CvBox2D'
答案 0 :(得分:2)
您的函数返回类型为CvBox2D
,因此您无法将(NULL)指针转换为它。
如果在函数内部检查失败时确实需要返回“nothing”,则可以将返回类型更改为指针到CvBox2D
:
CvBox2D* function()
{
...
}
您还必须更改在函数内创建返回对象的方式。
请注意,在C ++中使用原始指针通常不是一个好主意。 如果您认为必须使用指针,请查看std::shared_ptr(可在C ++ 11中找到)。
答案 1 :(得分:0)
如果要返回一些错误代码,可以执行以下操作:
int function(CvBox2D* output) {
// code...
// Assign to struct.
output->center = ...;
if (error) {
return RC_ERROR_FOO;
}
return RC_OK;
}
然后使用已经分配的结构(例如,在堆栈上)调用此函数:
{
CvBox2D myBox;
int retval = function(&myBox);
if (RC_OK == retval) {
printf("Good! Angle of box: %g", myBox.angle);
} else {
printf("Error: %d", retval);
}
}
其中RC_OK
,RC_ERROR_FOO
被定义为常量或更好,作为枚举(如果您使用的是C ++)。
答案 2 :(得分:0)
其他答案可以解决您的问题,但如果您想保留函数的签名,而不是返回错误代码,则应该抛出异常。