【发布时间】:2015-09-08 16:42:34
【问题描述】:
#include <iostream>
using namespace std;
template <typename T>
T max(T x, T y)
{
return (x > y) ? x : y;
}
int main()
{
cout << max(3, 7) << std::endl;
cout << max(3.0, 7.0) << std::endl;
cout << max(3, 7.0) << std::endl;
return 0;
}
我在这里期待 max 的实例
cout << max(3, 7) << std::endl; // max (int, int)
cout << max(3.0, 7.0) << std::endl; // max (double, double)
cout << max(3, 7.0) << std::endl; // max(int, double)
那么问题出在哪里?为什么我会得到
11 25 [Error] call of overloaded 'max(double, double)' is ambiguous
【问题讨论】:
-
您应该在不使用
using namespace std的情况下重试,以消除混乱的根源。 -
@juanchopanza 还是一样..
-
不管怎样做。修复您的代码并发布错误消息。
-
@LetDoit 这与“调用重载的最大值不明确”不一样!
-
@LetDoit 那是因为你们两个需要两个不同的模板参数,因为你使用的是两种不同的类型。