我开始学习模板,我从我的书中复制了代码,但编译器给了我这个错误
错误1错误:'swap':对重载函数的模糊调用“
这是我的程序
#include <iostream>
template <typename X>
void swap(X &a, X &b);
int _tmain(){
using namespace std;
int a, b;
cout << "enter two numbers:\n";
cin >> a >> b;
cout << "Your numbers are: " << a << ", " << b << endl;
swap(a, b); //error is here
cout << "Your numbers reversed are: " << a << ", " << b << endl;
return 0;
}
template <typename X>
void swap(X &a, X &b){
X temp = a;
a = b;
b = temp;
}
答案 0 :(得分:4)
您正在使用相同的签名重新定义函数交换,因此您对它的定义不明确,因此调用模糊。
如果要使用相同的签名来维护该函数,则应该选择不使用“using namespace std;”,这不会影响您的swap()定义,或者只是在另一个名称空间中定义该函数。 / p>
示例:
namespace your_namespace {
template <typename X>
void swap(X &a, X &b) {
X temp = a;
a = b;
b = temp;
}
}
int foo(10), bar(20);
std::cout << "foo: " << foo << "; bar: " << bar << std::endl;
your_namespace::swap(foo, bar);
std::cout << "foo: " << foo << "; bar: " << bar << std::endl;
输出:
foo: 10; bar: 20
foo: 20; bar: 10
问候!