我正在調用一個返回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