нет совпадения функции ошибка [шаблоны] - PullRequest
4 голосов
/ 18 ноября 2010

Почему следующий код не компилируется?

template <class T>
void foo_bar(T =5 , T = 10 , T = 15)
{
}

int main()
{
   foo_bar();
}

Я получаю эту ошибку no matching function for call to 'foo_bar()'Как исправить ошибку?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010

Тип аргументов по умолчанию в функции не может помочь при выводе шаблона type-parameter.T не может быть выведено в любом случае, когда вы вызываете функцию, такую ​​как foo_bar(), и, таким образом, вы получаете ошибку.

Так что попробуйте это foo_bar<int>();.В этом случае такой проблемы не возникнет, поскольку тип T указан явно.

2 голосов
/ 18 ноября 2010

Компилятор должен уметь определять типы, но если вы никогда его не дадите, он не знает, что делать с этими значениями по умолчанию.По сути, он не мог сопоставить ваш вызов с какой-либо функцией, потому что вы не дали ей тип для работы, а определение функции не помогло (по вышеупомянутым причинам).Поэтому вам нужно добавить в вызов тип в скобках, например

int main()
{
foo_bar<int>();
return 0;
}

или любой другой, который вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...