从Complex*到double的强制转换无效
Invalid cast from Complex* to 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;
}
你能告诉我我做错了什么吗?更不用说老师给我们这个函数的定义是"static double",但我又犯了一个错误,所以我只删除了"static"。
问题是double不能同时携带复数的实部和虚部。
我相信两个复数之间的距离是差的平方和的平方。
所以,你的代码应该是…
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::hyp。。。所以
double Complex::distance(const Complex &a, const Complex &b)
{
return std::hypot(a.real() - b.real(), a.imag() - b.imag());
}
如果我没记错,可以使用pythagorus计算距离,因此创建distance()中的复杂对象不是必需的。
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);
}
最简单的解决方案是使用标准库的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;
}
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;
}
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 从 'int' 到 'int*' CPP 的转换无效
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 为什么我收到"从常量指针到指针的转换无效?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- QTextStream的操作数到二进制的转换无效
- 从类型"void*"到函数指针的强制转换无效
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 模板类实例化中的指针转换无效
- 从"int"到"矢量*"的转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效