我正在尝试在我的类(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
定义了几个重载。如果您的代码段中的a
和b
是不同的类型,则由于调用不明确,因此重载解析将失败。
您需要适当地转换a
或b
,以便它们的类型匹配。
如果您打算调用atan2(double, double)
,则另一种解决方案是包括math.h
而不是cmath
,然后将该函数称为::atan2( a, b )
。这将隐式地将a
和b
都转换为double
(如果可能的话)。
关于c++ - 将atan2与类模板一起使用会因对重载函数的歧义调用而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10305026/