1

次のように宣言されたテンプレートクラスのメンバー関数があります。

template <class T>
int Data<T>::getPosition(vector<T> stuff, T newStuff, bool ascending)

私はこれを行のどこかで呼び出します

frequencies.insert(frequencies.begin() + getPosition(frequencies, current, ascending),
                       frequencies[i]);

その行の変数は次のように宣言されます。

vector<T> temp;
vector<int> frequencies;
int current = frequency.find(words[i])->second;

ただし、 を呼び出すと、次のgetPositionエラーが発生します。

Data.h|158|error: no matching function for call to 'primitives::Data<double>::getPosition(std::vector<int, std::allocator<int> >&, int&, bool&)'|
Data.h|165|note: candidates are: int primitives::Data<T>::getPosition(std::vector<T, std::allocator<_CharT> >, T, bool) [with T = double]|

ここで何が間違っていますか?

4

3 に答える 3

2

getPositionvector<T>タイプ、、Tおよびの3つの引数を取りますbool。この場合のテンプレートタイプTdouble(エラーメッセージに示されているように)ですが、それぞれ最初と2番目の引数としてとを渡そうvector<int>としています。int

おそらく、のパラメータはgetPositionテンプレート化されるべきではありませんか?何を達成しようとしているかによって異なります。結局のところ、そこにはハードコードされたintベクトルがあります。

于 2010-11-20T20:36:20.317 に答える
1

関数プロトタイプはでテンプレート化され、aとaがオブジェクトの最初のテンプレート化されたタイプに対応することを期待している場合、タイプを使用してオブジェクトに対してこの呼び出しを実行し、aとaを渡すData<t>ように見えます。Data<double>std::vector<int>intstd::vector<double>doubleData

于 2010-11-20T20:36:06.293 に答える
0
vector<T> temp;

ここでのTは、int、double、boolなどのタイプではありませんか?

于 2010-11-20T20:29:34.583 に答える