2017-10-29 50 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

这将工作。 –

相关问题