对重载函数的模糊调用(学习模板)

时间:2012-11-18 12:30:26

标签: c++

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

  

错误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;
}

1 个答案:

答案 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

问候!