使用带有 void 函数的模板
Using template with a void function
我正在尝试使用带有 void 函数的 c++ 模板泛型,
代码:
#include <iostream>
using namespace std;
template <typename T>
inline void swap(T& x, T& y)
{
T temp = x;
x = y;
y = temp;
}
int main()
{
cout << "Swapper!" << endl;
int x, y;
cin >> x >> y;
swap(x, y);
cout << x << y;
cin.get();
return 0;
}
但它给出了一个错误:
重载 swap() 的调用不明确
如何删除此错误?
问题using namespace std;
.你几乎不应该在代码中的任何位置使用此行。一个好的方法是只对所有std
名称进行质量处理,即写std::cout << "Swapper!" << std::endl;
而不是cout << "Swapper!" << endl;
。
在这种特殊情况下,您自己的swap
函数与std::swap
冲突,您可以通过<iostream>
间接获得。虽然std::swap
只保证存在于<algorithm>
和<utility>
中,但所有C++标准标头都允许拉入任何其他C++标准标头。
因此,一旦包含任何标准标头,using namespace std;
就会与std
中的所有名称产生潜在冲突。
您应该删除using namespace std;
,因为此命名空间已包含一个名为 swap
的函数,并且编译器不知道该选择哪一个。老实说,你真的不需要自己写这样的函数,它已经为你完成了。
另一种方法是将您的函数重命名为 swap
以外的名称。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何将指针从一个void函数传递到另一个C++
- 为什么全局函数 void showA(A&x) 能够访问 A 类的私有成员?
- 如何将函数<void()>写入管道/套接字对?
- 错误:无法在没有对象的情况下调用成员函数'void Fortest::run()'|
- 标准的大小::函数<void(int&)>类型
- 如何函数<void(字符串消息)>绑定到成员函数?
- 函数void()返回一个值,而不是char或string
- 函数void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)的用途
- 错误 LNK2019:函数 "void __cdecl Padding(int)" 中引用未解析的外部符号___iob_func
- 我可以有一个~析构函数(void)吗?
- 函数<void(T)> 带有默认参数的参数
- 错误:参数太少,无法函数"void alpha(std::string*,student)"