c++ - C++ 模板函数在 Visual Studio 2019 中不起作用 [错误 2668]
问题描述
在该通用交换函数中使用模板函数时出错:
#include <iostream>
#include <complex>
using namespace std;
template <class T>
inline void swap(T& d, T& s)
{
T temp = d;
d = s;
s = temp;
}
int main()
{
int m = 5, n = 10;
double x = 5.3, y = 10.6;
complex<double> r(2.4, 3.5), s(3.4, 6.7);
cout << "inputs: " << m << "," << n << endl;
swap(m, n);
cout << "outputs: " << m << "," << n << endl;
cout << "double inputs: " << x << "," << y << endl;
swap(x, y);
cout << "double outputs: " << x << "," << y << endl;
cout << "complex inputs: " << r << "," << s << endl;
swap(r, s);
cout << "complex outputs: " << r << "," << s << endl;
return 0;
}
有人可以在这里发现错误吗?我在三个调用函数处收到错误:
错误 C2668 'swap':对重载函数的模糊调用
我改成std::格式,即代码:
#include <iostream>
#include <complex>
template <class T>
inline void swap(T& d, T& s)
{
T temp = d;
d = s;
s = temp;
}
int main()
{
int m = 5, n = 10;
double x = 5.3, y = 10.6;
std::complex<double> r(2.4, 3.5), s(3.4, 6.7);
std::cout << "inputs: " << m << "," << n << std::endl;
swap(m, n);
std::cout << "outputs: " << m << "," << n << std::endl;
std::cout << "double inputs: " << x << "," << y << std::endl;
swap(x, y);
std::cout << "double outputs: " << x << "," << y << std::endl;
std::cout << "complex inputs: " << r << "," << s << std::endl;
swap(r, s);
std::cout << "complex outputs: " << r << "," << s << std::endl;
return 0;
}
现在我得到了完整的错误:
SwapFunction.cpp(55,14): error C2668: 'swap': ambiguous call to overloaded function
SwapFunction.cpp(32,13): message : could be 'void swap<std::complex<double>>(T &,T &)'
with
[
T=std::complex<double>
]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\utility(102,19): message : or 'void std::swap<std::complex<double>,0>(_Ty &,_Ty &) noexcept(<expr>)' [found using argument-dependent lookup]
with
[
_Ty=std::complex<double>
]
所以我只在调用函数中出错,std::complex<double>
接下来可以做什么?
解决方案
using namespace std
可能是这里的罪魁祸首,因为它std::swap
进入了全局命名空间。
因此,您可以删除它并完全限定相关标识符(推荐)或重命名您自己的swap
函数。
推荐阅读
- html - 我怎样才能垂直对齐我的组件并连续 3 个?
- javascript - 使用 async/await 获取 SyntaxError
- python-3.x - 如何在 scikit 学习模型中使用 Tensorflow 嵌入?
- javascript - 图像数据存储在哪里以及如何访问它
- android - Xamarin.Forms.Device.StartTimer - 用户交互似乎存在“滞后”
- wordpress - 编辑器中的 Wordpress getblocks 返回错误:('core/editor').getBlocks` 已弃用
- aws-lambda - 带有 aws Lambda 的 activejdbc
- java - Java Streams concat Streams with Supplier 后跟 distinct(惰性求值行为)
- html - CSS:如何在内容更改时阻止 div 的高度缩小
- f# - 更改返回类型的部分应用程序