0
class MtmMap {   
    public:    
    class Pair {     
         public:   
         Pair(const KeyType& key, const ValueType& value) :     
             first(key),       
             second(value) { }    
         const KeyType first;    
         ValueType second;    
     };     
    class node {    
        friend class MtmMap;    
        Pair data;    
        node* next;     
        public:    
        node();    
        node(const Pair& pair){
            data.Pair(pair.first , pair.second);
            next = NULL;
        }    
    };
    node* temp = new node(pair);
}

エラー:

'mtm::MtmMap<int, int, AbsCompare>::Pair::Pair()' の呼び出しに一致する関数がありません 'mtm::MtmMap<int, int>::Pair::Pair' の
使用が無効
ですvoid mtm::MtmMap::insert(const
mtm::MtmMap<KeyType, ValueType, CompareFunction>::Pair&) [with KeyType = int; ValueType = int;
CompareFunction = AbsCompare]'

4

2 に答える 2

0

私に最初に飛び出すのはこの行です:

node* temp = new node(pair);

newクラス定義内のクラスを作成しようとしているようです。それは問題の一部である可能性があります。また、この領域は少し混乱しているように見えます。

node(const Pair& pair){
  data.Pair(pair.first , pair.second);
  next = NULL;
}

Pairコンストラクターを直接呼び出そうとしているようです。それが有効なC++であるかどうかはわかりません。Pair実際には、次のようにコピーコンストラクタを定義するだけです。

Pair( Pair const& other )
  : first( other.first )
  , second( other.second )
{}

次に、そのブロックは

node( Pair const& pair )
  : data( pair )
  , next( NULL )
{}

チェックインすることもできますstd::pair

于 2013-01-22T04:06:23.540 に答える
0

引数を取るコンストラクターを定義することにより、Pair引数を取らない暗黙のデフォルト コンストラクターを削除します。Pairタイプのメンバーがあるnode場合、ノードの初期化リストで引数を渡す必要があるため、ノード コンストラクターを次のように置き換える必要があります。

    node(const Pair& pair) : data(pair.first, pair.second) {
        next = NULL;
    }

コンストラクターをdata適切に呼び出すもの。Learn Cppには、初期化子リストがどのように機能するかについてのチュートリアルがあり、読みたいと思うかもしれません。

于 2013-01-21T10:16:58.890 に答える