2012-04-24 76 views
1

我试图在我的类模板中使用函数atan2,但它不起作用。我有一个名为myclass的类,我试着制作一个函数模板,这个函数是取两个数字a和b的tan。这些既可以同时为int或两者是双打使用atan2与类模板失败,ambigous调用重载函数

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

'a'和'b'是什么类型? – ildjarn 2012-04-24 19:52:24

+0

是'a'和'b'全局变量吗? – TemplateRex 2012-04-24 19:54:01

+3

提示:如果错误消息提到“重载函数”,则函数参数的类型对问题至关重要。 – 2012-04-24 20:06:54

回答

4

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

您需要根据需要投下ab,以便它们的类型匹配。

如果您打算拨打atan2(double, double),替代解决方案将包括math.h而不是cmath,然后调用函数::atan2(a, b)。这将隐含地将ab转换为double(如果这种转换是可能的话)。