2012-04-24 60 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(如果這種轉換是可能的話)。