[英]Constructor with an object as argument (C++)
我有這個 class:
class CContact {
public:
CTimeStamp m_Stamp;
int m_Num1;
int m_Num2;
CContact(CTimeStamp mStamp, int i, int i1) {
m_Stamp = mStamp;
m_Num1 = i;
m_Num2 = i1;
}
};
我收到以下錯誤:
“CContact”的構造函數必須顯式初始化沒有默認構造函數的成員“m_Stamp”
我希望能夠以這種方式使用它:
test.addContact(CContact(CTimeStamp(1, 2, 3, 4, 5, 6), 999999999, 777777777));
這是什么意思,我該如何解決?
該錯誤是不言自明的。 您的CContact
構造函數沒有將任何值傳遞給m_Stamp
的構造函數,因此編譯器必須默認構造m_Stamp
,但不能因為CTimeStamp
沒有 默認構造函數。
您需要在CContact
構造函數的成員初始化列表中而不是在構造函數的主體中初始化CContact
的成員(或至少m_Stamp
),例如:
CContact(CTimeStamp mStamp, int i, int i1) :
m_Stamp(mStamp),
m_Num1(i),
m_Num2(i1)
{
}
這將調用m_Stamp
的復制構造函數,而不是默認構造函數。
您的原始代碼與此等效,這就是它失敗的原因:
CContact(CTimeStamp mStamp, int i, int i1)
: m_Stamp() // <-- here
{
m_Stamp = mStamp;
m_Num1 = i;
m_Num2 = i1;
}
您必須為 class CTimeStamp
定義一個默認構造函數。 例如:
CTimeStamp(int aa=0, int bb=0, int cc=0)
:a{aa},b{bb},c{cc}{}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.