C ++构造函数调用另一个构造函数

时间:2012-10-11 21:49:20

标签: c++ class object constructor

尝试构建包含以下代码的c ++程序时:

menutype::menutype(int cat_num){
    extras list = extras(cat_num);
}

extras::extras(int num_cats){
    head = new category_node;
    head->next = NULL;
    head->category = 1;
    category_node * temp;
    for(int i = 1; i < (num_cats); ++i){
        temp = new category_node;
        temp->next = head->next;
        head->next = temp;
        temp->category = (num_cats-(i-1));
    }
}

我收到错误:

  

cs163hw1.cpp:在构造函数'menutype :: menutype(int)'中:
  cs163hw1.cpp:59:31:错误:没有匹配函数来调用'extras :: extras()'
  cs163hw1.cpp:59:31:注意:候选人是:
  cs163hw1.cpp:5:1:注意:extras :: extras(int)

我不明白为什么,请帮忙!

4 个答案:

答案 0 :(得分:5)

由于该行不应该尝试调用默认构造函数(仅来自int的复制构造函数和转换构造函数),我只是猜测你的数据成员类型为extras class menutype,所以你必须在初始化列表中初始化它,因为它没有默认的构造函数:

menutype::menutype(int cat_num) : list(cat_num) { //or whatever the member is called

}

答案 1 :(得分:2)

您的menutype似乎拥有extras类型的成员。如果是这种情况,并且如果extras没有默认构造函数(看起来似乎是这种情况),则需要在初始化列表中初始化它:

menutype::menutype(int cat_num) : myextrasmember(cat_num) {}

答案 2 :(得分:1)

通常会通过以下方式在另一个类的构造函数中调用构造函数(如示例所示):

menutype::menutype(int cat_num) : list(cat_num) { }

这更有效,因为在初始化列表中调用了list(类型为extra)的构造函数。

答案 3 :(得分:1)

正如其他人所说,你正在错误地调用构造函数。

其他三个人已经指出了正确的初始化列表方法。但是,没有人指出如何在构造函数上下文之外正确调用构造函数。

而不是:

extras list = extras(cat_num);

执行:

extras list(cat_num);