簡體   English   中英

以 object 作為參數的構造函數 (C++)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM