0

これが機能しない理由がわかりません

In member function ‘void Test_CB::testCB()’: 
error: no matching function for call to ‘calculateCB(USSM&, USSM&, NL&, double&, CD&)’
candidate is:
template<class T, class V> std::vector<CV> calculateCB(const T&, const T&, const NL&, double, const CD&)

呼び方はこんな感じ

USSM x1;
USSM x2;
NL x3;
double x4;
CD x5;
CV b = calculateCB<USSM, USM>(x1,x2,x3,x4,x5)[0];

種類だけ説明しました。それらは適切な方法で作成または返されます。

テンプレートは次のように宣言されます

template <class T, class V>
std::vector<CV> calculateCB(T const & x1,
                            T const & x2,
                            NL const & x3,
                            double x4,
                            CD const & x5);

また、テンプレートを(必死の手段として)次のようにインスタンス化します

template<>
std::vector<CV> calculateCB<USSM,USM>(USSM const & x1,
                                      USSM const & x2,
                                      NL const & x3,
                                      double x4,
                                      CD const & x5);

2 番目のテンプレート引数は、テンプレート関数で内部的に使用される変数であることに注意してください。

4

1 に答える 1

1

私は問題を発見しました。それは、私が使用していたクラスの 1 つ (NL) の前方宣言が正しくないことが原因でした。実際の名前はもっと複雑で、大文字と小文字が一致しないため違いがわかりませんでした。

g++ のエラー メッセージは、少なくともどこに一致がないかを教えてくれるはずだと思います。

于 2013-04-16T09:10:42.320 に答える