返回NULL结构

时间:2013-06-27 13:22:50

标签: opencv

我正在调用一个返回CvBox2D类型结构的函数,但是我想检查函数中的错误,如果有错误则返回NULL。

CvBox2D function()
{
    ...

    if(ERROR)
        return NULL;

    ...
}

我收到错误:无法从'int'转换为'CvBox2D'

3 个答案:

答案 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_OKRC_ERROR_FOO被定义为常量或更好,作为枚举(如果您使用的是C ++)。

答案 2 :(得分:0)

其他答案可以解决您的问题,但如果您想保留函数的签名,而不是返回错误代码,则应该抛出异常。