0

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

CvBox2D function()
{
    ...

    if(ERROR)
        return NULL;

    ...
}

我收到一个错误:无法从“int”转换为“CvBox2D”

4

3 回答 3

2

您的函数返回类型是CvBox2D,因此您不能将 (NULL) 指针转换为它。

如果在函数内部检查失败时确实需要返回“nothing”,则可以将返回类型更改为指向的指针CvBox2D

CvBox2D* function()
{
    ...
}

您还必须更改在函数内创建返回对象的方式。

请注意,在 C++ 中使用原始指针通常不是一个好主意。如果您认为确实必须使用指针,请查看std::shared_ptr (在 C++11 中可用)。

于 2013-06-27T13:34:16.620 回答
0

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

于 2013-06-27T14:44:06.003 回答
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++)。

于 2013-06-27T14:22:38.667 回答