【小记】C++ pIMPL模式编译出现C2027错误
class DataLoadDialog : public QDialog { Q_OBJECT public: DataLoadDialog(const vector<int> &fhBoxVec, QWidget *parent = nullptr); private: class pAttr; std::unique_ptr<pAttr> _u; };
头文件当中的类声明,明显会导致C2027。
原因是没有将析构函数声明为显式。即修改为:
class DataLoadDialog : public QDialog { Q_OBJECT public: DataLoadDialog(const vector<int> &fhBoxVec, QWidget *parent = nullptr); ~DataLoadDialog(); private: class pAttr; std::unique_ptr<pAttr> _u; };
至于CPP文件当中,实现类的定义、初始化就不用说了吧。
由于犯这种错的基本都是新人,所以不懂pIMPL请参考:
https://docs.microsoft.com/zh-cn/cpp/cpp/pimpl-for-compile-time-encapsulation-modern-cpp?view=msvc-160
微软官方解释。