unique_ptr с заранее объявленным незавершенным типом не скомпилируется [duplicate]

На этот вопрос уже есть ответ:

Я пытаюсь следовать идиоме PIMPL для C ++. Таким образом, я создал класс AgeDetect, который будет моим пользовательским интерфейсом, и AgeDetectImpl, который содержит всю реализацию. Я с нетерпением жду объявления AgeDetectImpl и использования std::unique_ptr для сохранения его в качестве частного члена AgeDetect. Я следовал инструкциям из этого вопроса и реализовал деструктор, поэтому я не уверен, в чем проблема.

AgeDetect.h

#ifndef AGE_DETECT_H
#define AGE_DETECT_H

#include 
#include 

class AgeDetect {
    class AgeDetectImpl;
    std::unique_ptr 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(token);
    }

Сообщение об ошибке

 error: invalid application of ‘sizeof’ to incomplete type ‘AgeDetect::AgeDetectImpl’
  static_assert(sizeof(_Tp)>0,

Редактировать Исправлен заголовок охранники

2
задан AppD3veloper 26 June 2019 в 22:07
поделиться

1 ответ

Как упомянуто 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;
    };
0
ответ дан AppD3veloper 26 June 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: