2013-06-27 86 views
0

我正在调用一个返回CvBox2D类型结构的函数,但是我想检查函数中的错误,并在出现错误时返回NULL。返回NULL结构

CvBox2D function() 
{ 
    ... 

    if(ERROR) 
     return NULL; 

    ... 
} 

我得到一个错误:无法从“诠释”到“CvBox2D”转换

+0

改用异常或返回码。或者,正如Esenti所指出的那样,返回一个智能指针。 – Mikhail

回答

2

你的函数返回类型为CvBox2D,所以你不能一(NULL)指针转换它。

如果你真的需要返回“无”,如果在函数内部检查失败,您可以返回类型为指针更改为CvBox2D

CvBox2D* function() 
{ 
    ... 
} 

你也将不得不改变方式返回的对象是在你的函数内部创建的。

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

+0

我想返回一些内容,以便检查错误。 –

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++)。

0

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