前提・実現したいこと
ヘッダファイルでtemplate関数を作成しました。ヘッダファイルをインクルードしたソースファイルで、作成したtemplate関数を呼び出したいんですがエラーが発生してます。template関数の呼び出しについてのサイトはたくさんありますが解決には至りませんでした、よろしくおねがいします。
発生している問題・エラーメッセージ
no instance of function template "ネームスペース名::クラス名::関数名" matches the argument list and object (the object has type qualifiers that prevent a match)
該当のソースコード
ヘッダファイル namespace A{ class B{ private: Run2(); template <int P, int R> void Run(int U = 0,float T = 0);
ソースファイル namespace A{ class B{ void クラス名::Run2() { //元々Runを実行している関数:エラーなし #define CASE_PP(pp, rr) \ case pp: \ Run<10 * pp + 1, rr>(); \ break; #define CASE_RR(rr) \ case rr: \ switch (something_.pp) { \ CASE_PP(1, rr) \ CASE_PP(2, rr) \ default: { \ std::cerr << "Error1" << std::endl; \ break; \ } \ } \ break; switch (something_.rr) { CASE_RR(1) CASE_RR(2) default: { std::cerr << "Error2" << std::endl; break; } } #undef SWITCH_PP #undef CALL_RUN2_FUNC } Run<10 , 10>(); //Run2とは違う場所で実行したい //これに対して上のエラー template <int P, int R> //実装 void Run(int U,float T){ 省略 }
試したこと
引数リストとオブジェクトが違います、と言われた気がしたのでそもそものヘッダファイルで定義したtemplate関数が間違っている(RとTの型が違うから)のかと考えましたが、ソースファイルでの実行コマンドをコメントアウトするとエラーは消えるため、定義はあっていると思いました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 02:22
退会済みユーザー
2020/07/20 07:43 編集