C++ 模板重载

标签 c++ templates operator-overloading

我正在学习重载。我的代码有什么问题?下面是错误信息 In instantiation of ‘const _Tp& std::max(const _Tp&, const _Tp&, _Compare) [with _Tp = double; _Compare = double]': /usr/include/c++/4.8/bits/STL_algobase.h:263:26: 错误:‘__comp’不能用作函数 如果 (__comp(__a, __b))

    #include<iostream>
using namespace std;
template <typename T1, typename T2, typename T3> T1 max(T1,T2,T3);
template <typename T1, typename T2> T1 max(T1,T2);

template <typename T1, typename T2>
T1 max(T1 x, T2 y){
 return x+y;
}

template <typename T1, typename T2, typename T3>
T1 max(T1 x, T2 y, T3 z){
 return x+y+z;
}

int main()
{
        cout << max(1.2,2.3,3.4) << endl;
        cout << max(1,2) << endl;
}

最佳答案

编译器的错误消息清楚地表明编译器正在使用 std::max 而不是文件中定义的函数。这是你应该避免的另一个原因

using namespace std;

解决您的问题:

  1. 删除该行。
  2. 使用 std::coutstd::endl 而不仅仅是 coutendl .如果想继续使用coutendl,添加

    using std::cout;
    using std::endl;
    

关于C++ 模板重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31307708/

相关文章:

c++ - 运算符重载 operator= 使用友元函数

c# - 重写 C# 的 Monitor.Enter 和 Monitor.Exit

c++ - 使用类模板的下标重载函数中的引用类型初始化无效

C# 到 C++ 数组?

c++ - 从 C++ 到 C:替代 std::map?

c++ - 可变参数结构体臃肿,在结构体末尾添加了额外的填充

c++ - STATIC_ASSERTION_FAILURE 有什么作用?

c++ - 为什么插入/提取运算符的重载函数需要 ostream/istream 参数?

c++ - std::out 二维字符的外部维度

javascript - Angular 模板页面