我正在调用一个返回 CvBox2D 类型结构的函数,但是我想检查函数中的错误,如果有错误则返回 NULL。
CvBox2D function()
{
...
if(ERROR)
return NULL;
...
}
我收到一个错误:无法从“int”转换为“CvBox2D”
我正在调用一个返回 CvBox2D 类型结构的函数,但是我想检查函数中的错误,如果有错误则返回 NULL。
CvBox2D function()
{
...
if(ERROR)
return NULL;
...
}
我收到一个错误:无法从“int”转换为“CvBox2D”
您的函数返回类型是CvBox2D
,因此您不能将 (NULL) 指针转换为它。
如果在函数内部检查失败时确实需要返回“nothing”,则可以将返回类型更改为指向的指针CvBox2D
:
CvBox2D* function()
{
...
}
您还必须更改在函数内创建返回对象的方式。
请注意,在 C++ 中使用原始指针通常不是一个好主意。如果您认为确实必须使用指针,请查看std::shared_ptr (在 C++11 中可用)。
其他答案解决了您的问题,但如果您想保留函数的签名,而不是返回错误代码,您应该抛出异常。
如果要返回一些错误代码,可以执行以下操作:
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++)。