1

我正在尝试atan2在我的类模板中使用该函数,但它不起作用。我有一个名为 myclass 的类,我正在尝试制作一个函数模板,这个函数是取两个数字 a 和 b 的 tan。这些既可以是 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){};
// ...
4

1 回答 1

4

atan2C++根据其输入参数的类型定义了几个重载。如果ab在您的代码片段中是不同的类型,则重载解析将失败,因为调用不明确。

您需要强制转换ab酌情使它们的类型匹配。

如果您打算调用atan2(double, double),另一种解决方案是包含math.h而不是cmath然后调用该函数 as ::atan2( a, b )。这将隐式转换a和转换bdouble(如果可以进行这种转换)。

于 2012-04-24T19:57:04.777 回答