我正在尝试遵循C ++的PIMPL习惯用法。因此,我创建了一个类AgeDetect
,它将是我的用户界面,而AgeDetectImpl
则包含了所有实现。我正声明AgeDetectImpl
,并使用std::unique_ptr
将其存储为AgeDetect
的私有成员。我遵循了this问题的说明,并实现了析构函数,因此我不确定问题出在哪里。
AgeDetect.h
#ifndef AGE_DETECT_H
#define AGE_DETECT_H
#include <memory>
#include <opencv2/opencv.hpp>
class AgeDetect {
class AgeDetectImpl;
std::unique_ptr<AgeDetectImpl> m_ageDetectImplPtr = nullptr;
public:
AgeDetect(std::string token);
~AgeDetect();
std::string getAge(std::string imagepath);
std::string getAge(uint8_t* buffer, size_t rows, size_t cols);
std::string getAge(const cv::Mat& image);
};
#endif
AgeDetect.cpp
#include "ageDetect.h"
#include "ageDetectImpl.h"
AgeDetect::~AgeDetect() = default;
AgeDetect::AgeDetect(std::string token) {
//m_ageDetectImplPtr = std::make_unique<AgeDetectImpl>(token);
}
错误消息
error: invalid application of ‘sizeof’ to incomplete type ‘AgeDetect::AgeDetectImpl’
static_assert(sizeof(_Tp)>0,
修改 固定头罩
答案 0 :(得分:0)
正如CuriouslyRecurringThoughts和Jarod42所述,此问题是由于将nullptr
分配给m_ageDetectImplPtr
以下代码有效
class AgeDetectImpl;
class AgeDetect {
public:
AgeDetect(std::string token);
~AgeDetect();
std::string getAge(std::string imagepath);
std::string getAge(uint8_t* buffer, size_t rows, size_t cols);
std::string getAge(const cv::Mat& image);
private:
std::unique_ptr<AgeDetectImpl> m_ageDetectImplPtr;
};