我正在尝试在我的类(class)模板中使用函数atan2,但无法正常工作。我有一个名为myclass的类,正在尝试制作函数的模板,该函数取两个数字a和b的正切。这些要么都是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){};
// ...

最佳答案

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

您需要适当地转换ab,以便它们的类型匹配。

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

关于c++ - 将atan2与类模板一起使用会因对重载函数的歧义调用而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10305026/

10-12 20:50