我正在调用一个返回CvBox2D类型结构的函数,但是我想检查函数中的错误,并在出现错误时返回NULL。返回NULL结构
CvBox2D function()
{
...
if(ERROR)
return NULL;
...
}
我得到一个错误:无法从“诠释”到“CvBox2D”转换
我正在调用一个返回CvBox2D类型结构的函数,但是我想检查函数中的错误,并在出现错误时返回NULL。返回NULL结构
CvBox2D function()
{
...
if(ERROR)
return NULL;
...
}
我得到一个错误:无法从“诠释”到“CvBox2D”转换
你的函数返回类型为CvBox2D
,所以你不能一(NULL)指针转换它。
如果你真的需要返回“无”,如果在函数内部检查失败,您可以返回类型为指针更改为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++)。
其他答案可以解决您的问题,但如果您想保留函数的签名,而不是返回错误代码,则应该抛出异常。
改用异常或返回码。或者,正如Esenti所指出的那样,返回一个智能指针。 – Mikhail