前向声明cv :: Mat

Ver*_*ern 3 c++ opencv

嗨,我试图转发声明cv :: Mat类,但我不能让它工作.它给消息字段'frame'具有不完整的类型.

OpenGlImpl.h

namespace cv {
    class Mat;
}

class OpenGLImpl {

private:
   cv::Mat frame;

};
Run Code Online (Sandbox Code Playgroud)

我该如何正确地转发声明呢?

jua*_*nza 9

你不能在这里使用前瞻性声明.编译器需要具有定义,cv::Mat以使其成为数据成员OpenGLImpl.

如果你想避免这种约束,你可以拥有OpneGLImpl一个(智能)指针cv::Mat:

#include <memory>

namespace cv {
    class Mat;
}

class OpenGLImpl {

private:
   std::unique_ptr<cv::Mat> frame;

};
Run Code Online (Sandbox Code Playgroud)

然后,您可以在实现文件中实例化所cv::Mat拥有的unique_ptr.

请注意,引用也可以使用前向声明,但这里不太可能需要引用语义.