2017-10-29 47 views
0

我想通過派生類初始化一個基類成員項目。我遇到的問題是我傳遞的值取決於「x」。 所以這裏是我在做什麼:?如何在派生構造函數的大括號中初始化基構造函數? C++

Derived:: Derived() 
{ 
    uint8 number = getNumber(); 
    P p; 

    if (number == 3) 
    { 
     p = P1; 
    } 
    else 
    { 
    p = P2; 
    } 

    Base(p); 
} 

我得到的錯誤「沒有默認構造函數存在類‘基地’有什麼我做錯了

+0

你定義在基類的構造函數基礎:: Base的(P P) – HJuls2

+0

@ HJuls2 - 已定義,但沒有'Base()',因爲t他錯誤地指出。 '基地(p);'不是電話。它定義了一個類型爲'Base'的名爲'p'的對象,試圖默認構造它。 – StoryTeller

+0

Base(p)是構造函數調用。 Base :: Base(P p); –

回答

3

您只能在初始化基類構造函數的成員初始化列表順序如果需要調用一些其他的代碼,你可以委派給助手功能:?

P calculate_p() { 
    uint8 number = getNumber(); 
    if (number == 3) 
    return P1; 

    return P2; 
} 

Derived::Derived() : Base(calculate_p()) 
{ 
} 
+0

和calculate_p不是D類的一部分嗎? –

+0

@NoaRegev - 你的代碼示例沒有表明它必須是。通常最好採用最鬆散的耦合方式。如果'calculate_p'不需要訪問這個類,那麼最好使它成爲一個隱藏的實用程序免費函數。 – StoryTeller

+0

這將工作。 –

相關問題