代码之家  ›  专栏  ›  技术社区  ›  Radical Ed

隐式构造函数调用还是什么?[副本]

  •  -1
  • Radical Ed  · 技术社区  · 7 年前

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

           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 回复  |  直到 7 年前
        1
  •  4
  •   songyuanyao    7 年前

    我想是吧 Journal 没有默认构造函数,则需要初始化 journal 在里面 member initializer list 而不是在构造函数的主体中分配它。

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

    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)
    {}
    

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