2013-06-27 84 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

其他答案可以解決您的問題,但如果您想保留函數的簽名,而不是返回錯誤代碼,則應該拋出異常。