【小记】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

微软官方解释。

版权声明:
作者:芯片烤电池
链接:https://www.airchip.org.cn/index.php/2021/10/10/%e3%80%90%e5%b0%8f%e8%ae%b0%e3%80%91c-pimpl%e6%a8%a1%e5%bc%8f%e7%bc%96%e8%af%91%e5%87%ba%e7%8e%b0c2027%e9%94%99%e8%af%af/
来源:芯片烤电池
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
【小记】C++ pIMPL模式编译出现C2027错误
  class DataLoadDialog : public QDialog { Q_OBJECT public: DataLoadDialog(const vector<int> &fhBox……
<<上一篇
下一篇>>