2

我开始学习模板,并从书中复制了代码,但编译器给了我这个错误

错误 1 ​​错误:“交换”:对重载函数的模糊调用”

这是我的程序

#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;
}
4

1 回答 1

4

您正在使用相同的签名重新定义函数交换,因此您对它的定义不明确,因此是一个不明确的调用。

如果您想维护具有相同签名的函数,您应该选择不使用“using namespace std;”,这不会影响您的 swap() 定义,或者只是在另一个命名空间中定义函数。

例子:

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

问候!

于 2012-11-18T12:33:44.610 回答