gpt4 book ai didi

c++ - 模板函数调用歧义错误

转载 作者:可可西里 更新时间:2023-11-01 15:03:03 25 4
gpt4 key购买 nike

我不熟悉模板。我刚刚开始学习它。为什么我在以下程序中遇到错误?

#include <iostream>
#include <string>
using std::cout;
using std::string;
template<class C>
C min(C a,C b) {
return a<b?a:b;
}
int main()
{
string a="first string";
string b="second string";
cout<<"minimum string is: "<<min(a,b)<<'\n';
int c=3,d=5;
cout<<"minimum number is: "<<min(c,d)<<'\n';
double e{3.3},f{6.6};
cout<<"minimum number is: "<<min(e,f)<<'\n';
char g{'a'},h{'b'};
cout<<"minimum number is: "<<min(g,h)<<'\n';
return 0;
}

错误:

13  [Error] call of overloaded 'min(std::string&, std::string&)' is ambiguous

6 [Note] C min(C, C) [with C = std::basic_string<char>]

请帮帮我。

最佳答案

这里有两件事。

您的第一个问题是您只包含了错误消息的一部分。 Here is a link to the code being complied in gcc and clang ,以及产生的错误消息之一(完整):

main.cpp:13:34: error: call to 'min' is ambiguous
cout<<"minimum string is: "<<min(a,b)<<'\n';
^~~
/usr/include/c++/v1/algorithm:2579:1: note: candidate function [with _Tp = std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >]
min(const _Tp& __a, const _Tp& __b)
^
main.cpp:6:3: note: candidate function [with C = std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >]
C min(C a,C b) {
^

有两个候选人。一个在 main.cpp:6:3 (第 6 行,字符 3)和一个位于 algorithm:2579:1 (第 2579 行,字符 1)。

其中一个是你写的,其中一个在#include <algorithm> .

包含一个头文件 <algorithm>没有你要求它。允许标准 header 执行此操作,尽管有时很烦人。

<algorithm>有一个std::min函数模板。作为std::stringnamespace std 中模板类的一个实例, 函数模板 std::min通过称为“参数相关查找”或“Koenig 查找”的过程找到。 (在本地搜索函数重载候选者,也在函数参数的命名空间中,在函数参数的模板参数的命名空间中,以及在参数指向的事物的命名空间中功能等)

您的本地函数 min也找到了,因为它与 main 的主体位于同一 namespace 中.

两者同样匹配,编译器无法决定您要调用哪一个。所以它会生成一个错误告诉你这一点。

gcc 和 clang 都做 error:然后是一系列 note:秒。通常全部 note:错误后的 s 对于理解错误很重要。

要解决此问题,请尝试调用 ::min (完全限定调用),或将函数重命名为其他名称,或使您的版本比 std::min 更匹配(棘手,但在某些情况下可行),或调用 (min)(a,b) .最后一个会阻止 ADL/Koenig 查找,还会阻止宏扩展(例如,如果某些操作系统已将 #define min 宏注入(inject)其系统 header )(通过 @0x499602D2)。

关于c++ - 模板函数调用歧义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30265045/

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