与える:C++テンプレート関数は、私はこれで何が間違っている見当がつかないタイトルが十分説明的でなかった場合、私は申し訳ありませんが、エラー
template <class S, class P>
P* findPolicy(boost::ptr_vector<P> &policies,S *state)
{
typename boost::ptr_vector<P>::iterator it;
for (it = policies.begin(); it != policies.end(); ++it)
{
if (*it->getState() == state)
{
return &(*it);
}
}
}
私は内から上記の関数を呼び出すと以下のメンバ関数:
template <class S> template <class P>
void Policy<S>::updateOptimal(boost::ptr_vector<P> &policies)
{
S *curr_state = state;
boost::ptr_vector<Action> actions = curr_state->getAllActions();
P *best_pol;
boost::ptr_vector<Action>::iterator iter;
for (iter = actions.begin(); iter != actions.end(); ++iter)
{
if (iter->getNextState())
{
S *s = dynamic_cast<S *>(iter->getNextState());
P *temp_pol = var::findPolicy<S,P>(policies,s);
if (temp_pol->getValue() > best_pol->getValue())
{
opt_Action = &(*iter);
}
}
}
}
私は常に取得: policy.hpp:237: error: no matching function for call to 'findPolicy(boost::ptr_vector<Greedy<guState>, boost::heap_clone_allocator, std::allocator<void*> >&, State*&)
あなたは質問に取り組まなければならない、それはかなり混乱している。エラーメッセージの半分が消えてしまったことを認識するまでにはしばらく時間がかかりました。エラーメッセージ全体でも、その出力を生成したコードのオプションはどれも明確に示されていません。私の助言は、テンプレート定義を表示し、それをそのまま呼び出している関数を表示することです(無関係なコードは削除しますが、引数の型定義はすべてテンプレートのままにしておきます)。コンパイラがエラーメッセージに候補のセットをリストする場合があります。そのような場合は、質問に追加してください。 –
2つの機能を示す質問全体を編集しました。今私がしようとしていることがもっと明確になったら教えてください。 –
最初に明白なことを試してください:彼らは同じ翻訳単位ですか? 'findPolicy'が定義されている場所にファイルを含めましたか? 'var'とは何ですか?それは名前空間ですか?封筒タイプ?別々にコンパイルできる小さな例にコードを縮小しようとしましたか?とにかく質問ははるかに良いです: –