C ++构造函数接受成员初始化器

时间:2019-06-27 09:20:06

标签: c++

我要访问构造函数,成员初始化需要的次数很多。当类对象由程序初始化时,将调用默认构造函数。因此,同时,构造函数调用构造函数初始化了我提到的内容。

class A {
public:
    A();
    void fun1();
    void fun2();
};
A::A()
    : fun1()
    , fun2()
{
    cout << " Hi" << endl;
}
void A::fun1()
{
    cout << "Hello" << endl;
}
void A::fun2()
{
    cout << "Bye" << endl;
}
int main()
{
    A obj_a;
    return 0;
}    

预期结果:

  

你好,你好,再见

错误消息

error: class ‘A’ does not have any field named ‘fun1’
A::A():fun1(), fun2() {

2 个答案:

答案 0 :(得分:1)

您正在初始化器列表中调用函数,您应该在那里初始化数据成员。编译器会查找名为fun1和fun2的数据成员,但找不到任何成员,因此会通知您。 您可以在下面尝试这样:

 class A { 
    public: 
    A(); 
    void fun1(); 
    void fun2(); 
  }; 
  A::A() { 
    cout << " Hi" << endl; 
    fun1();
    fun2();
  } 
  void A::fun1() { 
    cout << "Hello" << endl; 
  }       
  void A::fun2() { 
    cout << "Bye" << endl; 
  } 
  int main() { 
    A obj_a; 
    return 0; 
  }

答案 1 :(得分:0)

您遇到错误:

error: class ‘A’ does not have any field named ‘fun1’
A::A():fun1(), fun2() {

因为class A没有任何名称为fun1或fun2的数据成员。

成员初始化列表用于初始化数据成员或调用基本构造函数。

有关详细信息,请参见:Constructor & Member Initilization List

类的方法可以在构造函数体中调用,例如:

A::A() 
{ 
   fun1();
   fun2();
}