2013-04-03 33 views
0

我想寫IplImage包裝。錯誤「字段有不完整的類型」

這裏是我的代碼:

class DrawingDetector 
{ 
public: 
    typedef boost::shared_ptr<IplImage> ipl_image_ptr_t; 

    DrawingDetector(){} 
    DrawingDetector::DrawingDetector(IplImage* img) : m_image(img, ipl_deleter){} 

private: 

    static void ipl_deleter(IplImage* ipl_img) 
    { 
     if(ipl_img) 
     { 
      cvReleaseImage(&ipl_img); 
     } 
    } 

    ipl_image_ptr_t m_image; // compiler error "field ‘m_image’ has incomplete type" 

}; 

我有以下compling錯誤 「字段」m_image具有不完整的類型「。 我的編譯器是gcc 4.4。

爲什麼我不能創建一個空的shared_ptr?

+2

你可以添加你的包括? – Turgal

+0

只是一個旁註:你的構造函數只需要一個普通的指針,而在你的類中你通過'shared_ptr'和一個自定義的刪除器來獲得'IplImage'的所有權。這意味着你正在將'IplImage'的構建與它的刪除分開,但兩者應該一致。解決方案:使構造函數參數本身成爲'shared_ptr'。這樣你就可以將調用者的IplImage構造成*並銷燬*。更進一步,它在你的課堂界面中明確說明,你擁有圖像的共同所有權,這是一件好事。 –

回答

3

由於該字段的類型爲boost::shared_ptr<IplImage>,因此您似乎沒有包含boost/shared_ptr.hpp和/或標頭定義爲IplImage。對於IplImage,僅提供前向聲明可能就足夠了。

2

編譯器沒有看到boost共享ptr或IplImage定義。您應該包含相應的標頭

2

「不完整類型」表示已聲明但未定義的類型。這可能意味着你不包括boost/shared_ptr.hpp,它提供了定義。

相關問題