错误“字段类型不完整”

时间:2013-04-03 14:58:25

标签: c++ opencv wrapper shared-ptr

我正在尝试编写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"

};

我有以下编译错误“field'm_image'的类型不完整”。 我的编译器是gcc 4.4。

为什么我无法创建一个空的shared_ptr?

3 个答案:

答案 0 :(得分:3)

由于该字段的类型为boost::shared_ptr<IplImage>,因此您似乎未包含boost/shared_ptr.hpp和/或定义IplImage的标头。对于IplImage,仅提供前向声明就足够了。

答案 1 :(得分:2)

编译器没有看到boost shared ptr或IplImage定义。您应该包含相应的标题

答案 2 :(得分:2)

“不完整类型”表示已声明但未定义的类型。这可能意味着您没有提供boost/shared_ptr.hpp,它提供了定义。