0

テンプレートオブジェクトのベクトルのベクトルを作成しようとしています。内部ベクトルのサイズを変更しようとするとエラーが発生し、エラーメッセージの先頭または末尾を作成できません。HashTable :: Item::Itemをどこから取得するのかわかりません。助言がありますか?

/usr/include/c++/4.4.6/bits/stl_vector.h(552):エラー:コンストラクター "HashTable :: Item :: Item [with Key = int、Value=Varvalue]"のインスタンスが引数リストのサイズに一致しません(size_type __new_size、value_type __x = value_type())

     detected during:
       instantiation of "void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type={size_t={unsigned long}}, std::vector<_Tp, _Alloc>::value_type) [with _Tp=HashTable<int, Varvalue>::Item, _Alloc=std::allocator<HashTable<int, Varvalue>::Item>]" at line 118 of "main.cc"

関連するコードは次のとおりです。

#define VECLEN 16
クラスVarvalue
{{
公衆:
        char data [32];
};

レンプレート クラスHashTable {{ プライベート: クラスアイテム {{ 公衆: ブール値が有効です。 キーキー; 値値; アイテム*次;
Item(const Key k、const Value v、Item * b = 0、bool val = true): key(k)、value(v)、next(b)、valid(val){} };

vector<vector<Item> > table;
    int tableSize;
    HashTable(const int s): tableSize(s)
    {
            table.resize(tableSize);
            for(int i=0; i<table.size(); i++)
                  table[i].resize(VECLEN);       // <<-- error line 118
    }

}

int main() { HashTable<int, Varvalue> htable(nkeys); }
4

2 に答える 2

6

Itemresizeにはデフォルトのコンストラクタがないため、 に 2 つの引数を指定する必要がありますvector<Item>Item後者の引数は、ベクトルを埋めるための「デフォルト」です。

于 2012-08-14T21:01:02.367 に答える
2

C++ では、クラスを宣言し、コンストラクターを提供しない場合、既定のコンストラクター (入力パラメーターなし) が自動的に生成されます。入力パラメーターを使用してコンストラクターを宣言すると、デフォルトのコンストラクターが与えられません。あなたの場合、item入力パラメーターとして k と v を必要とするクラスのコンストラクターを宣言しましたが、それらを指定できなかったため、入力パラメーターのないコンストラクターを宣言するか、itemk と v を指定します。

于 2012-08-14T21:11:20.317 に答える