【问题标题】:C++ constructor calling another constructorC++ 构造函数调用另一个构造函数
【发布时间】:2012-10-11 21:49:20
【问题描述】:

尝试构建包含以下代码的 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)

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

【问题讨论】:

    标签: c++ class object constructor


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        代替:

        extras list = extras(cat_num);
        

        做:

        extras list(cat_num);
        

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-03-24
            • 1970-01-01
            • 1970-01-01
            • 2015-07-02
            • 1970-01-01
            • 2014-08-01
            • 1970-01-01
            • 2010-12-15
            • 2017-01-05
            相关资源
            最近更新 更多