1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 127
|
||||||
1 | ||||||
Шаблоны, ошибка "неоднозначный вызов перегруженной функции"28.04.2018, 22:02. Показов 3130. Ответов 8
Метки нет (Все метки)
ОШИБКА: .\template.cpp(43) : error C2668: swap: неоднозначный вызов перегруженной функции 1> .\template.cpp(12): может быть 'void swap<double>(T &,T &)' 1> with 1> [ 1> T=double 1> ] 1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\utility(16): или 'void std::swap<double>(_Ty &,_Ty &)' 1> with 1> [ 1> _Ty=double 1> ] 1> при попытке сопоставить список аргументов '(double, double)' 1>.\template.cpp(62) : error C2668: swap: неоднозначный вызов перегруженной функции 1> .\template.cpp(12): может быть 'void swap<int>(T &,T &)' 1> with 1> [ 1> T=int 1> ] 1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\utility(16): или 'void std::swap<int>(_Ty &,_Ty &)' 1> with 1> [ 1> _Ty=int 1> ] 1> при попытке сопоставить список аргументов '(int, int)' 1>.\template.cpp(82) : error C2668: swap: неоднозначный вызов перегруженной функции 1> .\template.cpp(12): может быть 'void swap<float>(T &,T &)' 1> with 1> [ 1> T=float 1> ] 1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\utility(16): или 'void std::swap<float>(_Ty &,_Ty &)' 1> with 1> [ 1> _Ty=float 1> ] 1> при попытке сопоставить список аргументов '(float, float)' По сути, шаблон в самом начале должен создавать для функции свап тип для приёма, но почему-то ругается. Или это я чего-то не понимаю. При этом шаблон на функции проверки правильности ввода работает прекрасно
0
|
28.04.2018, 22:02 | |
Ответы с готовыми решениями:
8
Ошибка: неоднозначный вызов перегруженной функции Ошибка sin: неоднозначный вызов перегруженной функции Ошибка C2668: mult: неоднозначный вызов перегруженной функции Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции |
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
28.04.2018, 22:05 | 2 |
Убери самодельный swap() и используй std::swap(). Либо имя другое придумай.
1
|
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 127
|
|
28.04.2018, 22:11 [ТС] | 4 |
Сорян, туплю) Забыл цифру в названии записать)
Спасибо) UPD. После смены названия на usSwap (user's swap) появилась новая проблема. С чего-то начал ругаться компоновщик: 1>template.obj : error LNK2028: ссылка на неразрешенную лексему (0A0002B8) "void __cdecl CheckInput(float &)" (?CheckInput@@$$FYAXAAM@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ) 1>template.obj : error LNK2028: ссылка на неразрешенную лексему (0A0002B9) "void __cdecl CheckInput(double &)" (?CheckInput@@$$FYAXAAN@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ) 1>template.obj : error LNK2028: ссылка на неразрешенную лексему (0A0002BA) "void __cdecl CheckInput(int &)" (?CheckInput@@$$FYAXAAH@Z) в функции "int __cdecl head(void)" (?head@@$$FYAHXZ) 1>template.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl CheckInput(int &)" (?CheckInput@@$$FYAXAAH@Z) в функции "int __cdecl head(void)" (?head@@$$FYAHXZ) 1>template.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl CheckInput(float &)" (?CheckInput@@$$FYAXAAM@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ) 1>template.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl CheckInput(double &)" (?CheckInput@@$$FYAXAAN@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
0
|
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 127
|
|
28.04.2018, 22:17 [ТС] | 6 |
Просто убрать первоначально забыл. Посоветуй, что с ошибками выше сделать, пожалуйста)
0
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
28.04.2018, 22:25 | 7 |
Там же всё написано - функции объявлены, а реализации нет. Убери их.
0
|
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
|
||||||
28.04.2018, 22:26 | 8 | |||||
Тут все просто:
void CheckInput(B &value) полностью определена не поможет, так как компилятору "болие по душе" не шаблонные функции.В этом можно убедится заменив все вызовы CheckInput на вызовы с явным шаблонным аргументом, например CheckInput<float>(a); - ошибка исчезнет.
0
|
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 127
|
|
28.04.2018, 22:28 [ТС] | 9 |
С начала так и делал, просто решил попробовать упростить код на 2 функции. Спасибо.
0
|
28.04.2018, 22:28 | |
28.04.2018, 22:28 | |
Помогаю со студенческими работами здесь
9
Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции - C++ Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции Ошибка 2, error C2668: pow: неоднозначный вызов перегруженной функции Ошибка в программе error C2668: std::to_string: неоднозначный вызов перегруженной функции Неоднозначный вызов перегруженной функции Неоднозначный вызов перегруженной функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |