我想重载*运算符,以便它将乘以类的复杂子变量并返回复杂的结果。我的想法如下:
#include <complex>
using namespace std;
class a{
public:
std::complex<double> x0;
...
};
template<class T> complex<T> operator*(const a &lfv, const a &rfv){
return lfv.x0*rfv.x0;
}
但它不起作用......任何想法或评论?
答案 0 :(得分:3)
您的班级拥有std::complex<double>
个数据成员,而不是模板。您需要一个非模板函数:
std::complex<double> operator*(const a& lfv, const a& rfv){
return lfv.x0*rfv.x0;
}
在您的示例中,模板函数无法从传递给它的参数中推断出返回类型。
答案 1 :(得分:1)
复杂类已经处理了这一点,即它总是在乘法后返回复杂的结果。
用法如下:
complex<double> p(10,20);
complex<double> q(2,3);
std::cout << p*q << endl;
输出是:
(-40,70)
或者,如果你可以这样做:
class a{
public:
std::complex<double> x0;
};
complex<double> operator*(const a &lfv, const a &rfv){
return lfv.x0*rfv.x0;
}
int main()
{
a y;
y.x0 = complex<double>(10,20);
a z;
z.x0 = complex<double>(10,20);
std::cout << y*z << endl;
}
答案 2 :(得分:0)
我无法想办法找到你要找的东西(从complex<T>
返回operator*
),因为operator*
无法自动扣除该类型,所以你有指定类型,如下面的示例:
a my_var1;
a my_var2;
complex<double> result = operator*<double>(my_var1, my_var2);
...或者您可以关注@juanchopanza建议的内容,不要将模板与operator*
一起使用。