gpt4 book ai didi

c++ - 为什么模板函数不明确?

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:34 25 4
gpt4 key购买 nike

当我编译这段代码时,我得到一个错误提示

call of overloaded swap(int&, int&) is ambiguous

但我在这里只写了一个交换函数。

你能告诉我为什么这个函数不明确吗?我需要做哪些改变才能正确运行程序?

using namespace std;

template <class T>
void swap(T& x, T& y)
{
T temp;
temp = x;
x = y;
y = temp;
}

int main()
{
int a, b;

cout << "Enter two elements: ";

cin >> a;
cin >> b;

swap(a, b);
cout << "a is "<<a << '\t'<<"b is " << b << std::endl;

return 0;
}

为什么swapping函数只有swap函数,却重载了?

最佳答案

你应该使用

 ::swap(a,b); //use one in global namespace, which is the one you defined

如果你想调用你定义的那个。自 std还定义了一个 swap函数模板,编译器将搜索 std namespace如果你不使用 :: .

更具体地说,参数 ab类型为 int ,在 std namespace 中定义,当编译器搜索 swap 时, 它会找到两个版本:std namespace 中的那个和您在 global namespace 中定义的另一个.您需要明确告诉编译器应该使用哪一个,否则会导致歧义。

关于c++ - 为什么模板函数不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com