次のコードがコンパイルされないのはなぜですか?一致する関数のエラーがありません[テンプレート]
template <class T>
void foo_bar(T =5 , T = 10 , T = 15)
{
}
int main()
{
foo_bar();
}
私はこのエラーno matching function for call to 'foo_bar()'
を取得します。どのようにエラーを修正するには?
次のコードがコンパイルされないのはなぜですか?一致する関数のエラーがありません[テンプレート]
template <class T>
void foo_bar(T =5 , T = 10 , T = 15)
{
}
int main()
{
foo_bar();
}
私はこのエラーno matching function for call to 'foo_bar()'
を取得します。どのようにエラーを修正するには?
関数内のデフォルト引数の型は、テンプレートの推定に役立ちません。type-parameter
は、foo_bar()
のような関数を呼び出すとエラーが発生するため、いずれの場合でも推論できません。
これを試してください。foo_bar<int>();
この場合、T
のタイプが明示的に指定されているため、このような問題はありません。
コンパイラは型を見つけ出すことができなければなりませんが、決して与えないと、それらのデフォルト値をどうするか分かりません。基本的には、あなたの呼び出しを関数にマッチさせることができませんでした。なぜなら、関数の型定義が機能しなかったからです(前述の理由による)。したがって、
int main()
{
foo_bar<int>();
return 0;
}
などの種類を好きなように括弧で囲んでタイプを追加する必要があります。
これは機能します。感謝します。 – FooBar