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"

};

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

为什么我不能创建一个空的 shared_ptr?

4

3 回答 3

3

由于该字段具有 type boost::shared_ptr<IplImage>,因此您似乎没有包含boost/shared_ptr.hpp和/或标题定义IplImage. 因为IplImage只提供一个前向声明就足够了。

于 2013-04-03T15:02:27.287 回答
2

编译器看不到 boost 共享 ptr 或 IplImage 定义。您应该包括相应的标题

于 2013-04-03T15:01:06.467 回答
2

“不完整类型”是指已声明但未定义的类型。这可能意味着您不包括boost/shared_ptr.hpp提供定义的 。

于 2013-04-03T15:03:42.857 回答