将atan2与类模板一起使用会因对重载函数的模糊调用而失败

时间:2012-04-24 19:50:04

标签: c++ class templates

我正在尝试在我的类模板中使用函数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){};
// ...

1 个答案:

答案 0 :(得分:4)

C ++为atan2定义了几个重载,具体取决于其输入参数的类型。如果代码段中的ab是不同的类型,则由于调用不明确,重载解析将失败。

您需要根据需要投放ab,以便其类型匹配。

如果您打算致电atan2(double, double),则替代解决方案是包含math.h而不是cmath,然后将该功能称为::atan2( a, b )。这会隐式地将ab转换为double(如果可以进行转换)。