1

次のコードを含む 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

4 に答える 4

5

その行はデフォルトのコンストラクターを呼び出そうとするべきではないため (からコンストラクターと変換コンストラクターをコピーするだけです)、 classintに型のデータメンバーがあると推測するだけなので、初期化リストでそれを初期化する必要があります。デフォルトのコンストラクターはありません。extrasmenutype

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

}
于 2012-10-11T21:52:12.610 に答える
2

menutypetype のメンバーを保持しているようextrasです。その場合、およびextrasデフォルトのコンストラクターがない場合 (そうであるように思われます)、初期化リストで初期化する必要があります。

menutype::menutype(int cat_num) : myextrasmember(cat_num) {}
于 2012-10-11T21:53:16.097 に答える
1

他の人が言ったように、コンストラクターを間違って呼び出しています。

他の 3 人が、適切なイニシャライザ リストメソッドを既に指摘しています。ただし、コンストラクター コンテキストの外部でコンストラクターを適切に呼び出す方法を指摘した人はいません。

それ以外の:

extras list = extras(cat_num);

行う:

extras list(cat_num);
于 2012-10-11T21:57:54.790 に答える
1

通常、次の方法で別のクラスのコンストラクター内でコンストラクターを呼び出します (例のように)。

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

これは、(extra 型の) リストのコンストラクターが初期化リストで呼び出されるため、より効率的です。

于 2012-10-11T21:55:05.790 に答える