1

atan2クラス テンプレートで関数を使用しようとしていますが、機能しません。myclass というクラスがあり、関数のテンプレートを作成しようとしています。この関数は、a と b の 2 つの数値の tan を取得します。これらは両方とも int または両方とも double のいずれかです。

template <class T>   
T myclass<T>::returnArg()  
{  
    T arg(0);  
    arg = atan2(a, b);  
    return arg;  
} 

しかし、私は得るerror C2668: 'atan2' : ambiguous call to overloaded function。誰でもこれを修正するために何かを提案できますか?

ありがとうございました。

編集: int と double を 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

C++ ではatan2、入力引数の型に応じていくつかのオーバーロードが定義されています。aコード スニペット内のとが異なるタイプの場合b、呼び出しがあいまいであるため、オーバーロードの解決に失敗します。

タイプが一致するように、必要に応じてaまたはをキャストする必要があります。b

を呼び出すつもりなら、別の解決策として、代わりにatan2(double, double)をインクルードしてから、関数を として呼び出します。これは暗黙的に and の両方を変換します (そのような変換が可能な場合)。math.hcmath::atan2( a, b )abdouble

于 2012-04-24T19:57:04.777 に答える