2010-11-20 8 views
1

私はそのように宣言テンプレートクラスのメンバ関数があります。私はその行の変数が宣言されているC++テンプレートマッチングなしの関数呼び出し

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

ラインで、このどこかを呼び出す

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

を次のようになります。

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]| 

私はここで間違っていますか?

+0

テンプレートパラメータTの取得方法が明確でないため、より多くのコンテキストを提供する必要があります。プリミティブ::データの別のメンバ関数から呼び出していますか? – Stewart

+2

また、ベクトルを値渡しすることは望ましくないでしょう。それはベクトルをコピーしますが、はるかに効率的なconst refで渡すことができます。 – Stewart

+0

@Stewartはいすべてコードはprimitives :: Dataクラスの内部にあります。また、提案に感謝します。代わりに – wrongusername

答えて

1

あなたの関数のプロトタイプは、それはおそらくstd::vector<double>doubleが初期に対応することを期待する場合、Data<t>にテンプレート化し、あなたがタイプData<double>でオブジェクトにこのコールを実行し、std::vector<int>intを渡しているように見えますテンプレート型のDataオブジェクトです。

+0

あなたは自分の質問に答えを提出してから数秒もたったのと同じように投稿しました:) – wrongusername

0
vector<T> temp; 

int、double、boolのような形式ではいけませんか?

+0

というconst参照を実装します。これは、 'Data'クラスがどんな型であっても格納する必要があります。 – wrongusername

+0

OK、Dataクラスにdoubleを使用しているようで、ベクトル stuff(getPositionの最初のパラメータ)もdoubleになると予想されます。しかし、ベクトルを最初の位置に渡しています。 – Naveen

2

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

おそらくgetPositionのパラメータはテンプレート化しないでください。あなたが達成しようとしていることに依存します。結局、そこにハードコーディングされたintベクトルがあります。

関連する問題