我正在尝试在我的类模板中使用函数atan2
,但它不起作用。我有一个名为myclass的类,我正在尝试制作一个函数模板,这个函数是取两个数字的tan,a和b。这些既可以是int也可以是两个
template <class T>
T myclass<T>::returnArg()
{
T arg(0);
arg = atan2(a, b);
return arg;
}
但我得error C2668: 'atan2' : ambiguous call to overloaded function
。任何人都可以建议解决这个问题吗?
谢谢。
编辑:我希望能够将整数和双精度传递给atan2函数,我试过了
arg = atan2(<T> a, <T> b);
但那没用。
编辑2:我在班上宣布a和b为
template <class T> class myclass
{
private:
T a,b;
public:
myclass(): a(0),b(0){};
myclass(T r, T i) : a(r), b(i){};
// ...
答案 0 :(得分:4)
C ++为atan2
定义了几个重载,具体取决于其输入参数的类型。如果代码段中的a
和b
是不同的类型,则由于调用不明确,重载解析将失败。
您需要根据需要投放a
或b
,以便其类型匹配。
如果您打算致电atan2(double, double)
,则替代解决方案是包含math.h
而不是cmath
,然后将该功能称为::atan2( a, b )
。这会隐式地将a
和b
转换为double
(如果可以进行转换)。