我必须返回两个复数之间的距离,而我得到的错误是在返回行中说“从Complex *到double的无效转换”。
double Complex::distance(const Complex &a, const Complex &b)
{
Complex *number = new Complex();
number->modificaRe(a.real() - b.real());
number->modificaIm(a.imag() - b.imag());
return (double)number;
}
你可以告诉我,我做错了什么?
更不用说老师给我们这个函数的定义为“静态双精度”,但我得到了另一个错误所以我只是删除了“静态”。
答案 0 :(得分:2)
问题是双精灵不能携带复合体的实部和虚部。
我相信两个复数之间的距离是差异平方之和的sqrt。
所以,你的代码应该是......
double Complex::distance(const Complex &a, const Complex &b)
{
double number;
double r = a.real() - b.real();
double i = a.imag() - b.imag();
number = sqrt(r*r + i*i);
return number;
}
正如H2CO3指出的那样,使用std :: hypot可能是后来的......所以
double Complex::distance(const Complex &a, const Complex &b)
{
return std::hypot(a.real() - b.real(), a.imag() - b.imag());
}
答案 1 :(得分:1)
最简单的解决方案是使用标准库的std::comlpex
类模板。您可以使用减法和std::abs
来获得“距离”:
#include <complex>
#include <iostream>
template <typename T>
T complex_distance(const std::complex<T>& a, const std::complex<T>& b)
{
return std::abs(b-a);
}
int main()
{
std::complex<double> c1(-1,-1);
std::complex<double> c2(2,2);
std::cout << (c2-c1) << std::endl;
std::cout << complex_distance(c2,c1) << std::endl;
}
答案 2 :(得分:1)
如果我没记错的话,可以使用毕达哥拉斯计算距离 - 创建 距离()中的复杂对象不是必需的。
double Complex::distance(const Complex &a, const Complex &b)
{
double x = a.real() - b.real();
double y = a.imag() - b.imag();
return sqrt(x * x + y * y);
}
答案 3 :(得分:0)
不支持从指向Complex
的指针投射到double
。它甚至不清楚为什么你在这里创建指针而不是仅仅在堆栈上分配它。
例如:
double Complex::distance(const Complex &a, const Complex &b)
{
Complex number;
number.modificaRe(a.real() - b.real());
number.modificaIm(a.imag() - b.imag());
return (double)number;
}