我有一段代码片段。当我尝试编译它时,我收到一个错误:
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;
}
我想某处存在隐式构造函数调用。哪里可以?
答案 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
。