隐式构造函数调用还是什么?

时间:2018-02-23 11:38:08

标签: c++ constructor

我有一段代码片段。当我尝试编译它时,我收到一个错误:

       no matching function for call to ‘Journal::Journal()’
       dBestSeller, dCheckedOut, dCheckOutDate, dCustomer) {
                                                         ^
        Article::Article(int dId, QString dTitle, QList<QString> *dAuthors,
             QList<QString> *dkeywords, QString dPublisher, int dPrice,
             Journal dJournal,bool dReference, bool dBestSeller,
             bool dCheckedOut, QDate *dCheckOutDate, Patron *dCustomer)
        : Document(dId, dTitle, dAuthors, dkeywords, dPublisher, dPrice,
        dReference, dBestSeller, dCheckedOut, dCheckOutDate, dCustomer) 
        { 
           journal = dJournal;
        }

我想某处存在隐式构造函数调用。哪里可以?

1 个答案:

答案 0 :(得分:3)

我认为Journal没有默认构造函数,那么您需要在member initializer list中初始化journal,而不是在构造函数体中分配它。

  

成员初始值设定项列表是可以指定这些对象的非默认初始化的位置。对于无法进行默认初始化的成员,例如引用成员和const限定类型,必须指定成员初始值设定项。

Article::Article(int dId, QString dTitle, QList<QString> *dAuthors,
     QList<QString> *dkeywords, QString dPublisher, int dPrice,
     Journal dJournal,bool dReference, bool dBestSeller,
     bool dCheckedOut, QDate *dCheckOutDate, Patron *dCustomer)
: Document(dId, dTitle, dAuthors, dkeywords, dPublisher, dPrice,
    dReference, dBestSeller, dCheckedOut, dCheckOutDate, dCustomer), 
  journal (dJournal)
{}

否则,journal将首先尝试默认初始化,然后在构造函数的主体中分配。请注意,初始化和赋值是不同的东西;在构造函数体内赋值之前,必须初始化journal