复数的实部和虚部
我有2个指向两个20个成员数组的指针。 我的数组包含复数。 我想通过元素除法为复杂数字进行元素分解,这就是为什么我需要将数字分成实部和虚部。 我尝试了下面的代码,但它给出了错误。
#include <complex>
complex *a;
complex *b;
complex array1[20];
complex array2[20];
a = &array1;
b = &array2;
int i=0;
for (i=0;i<=19;i++)
{
real_part_array1[i] = real(*a[i]);
imag_part_array1[i] = imag(*a[i]);
real_part_array2[i] = real(*b[i]);
imag_part_array2[i] = imag(*b[i]);
}
我得到的第一个错误是; 我试图把它写成
#include <complex.h>
错误信息是“无法打开源文件complex.h”。 然后我删除了h,错误消失了。 我的第二个错误是real()和imag()。 错误消息是“标识符实际未定义”。
对于部门,我必须把他们分为真实和虚拟的部分,但我不知道如何解决这个问题。 我希望你们能帮助我。
complex
不是一个类型,它是一个类型模板。 您需要指定实部和虚部的类型作为模板参数,例如complex<double>
。
类型模板complex
以及函数real
和imag
都位于std
命名空间中。
关于complex<...>
,你可以写std::complex<...>
或using std::complex; below your includes. (You could also write
using std::complex; below your includes. (You could also write
using std::complex; below your includes. (You could also write
使用namespace std using std::complex; below your includes. (You could also write
;`但是这对于习惯它可能是危险的。)
关于real
和imag
,他们可以使用ADL( 一 rgument d ependent 升 ookup:当他们的说法是在std
命名空间,功能名称会自动抬起头来std
过),所以你不需要指定这些命名空间功能。
在行a = &array1;
(和另一个类似),你指向整个数组array1
,这是一个指向数组的指针。 你可能想要的是&array[1]
或array1
,因为数组可以隐式转换为指向它们第一个元素的指针。
在*a[i]
您访问数组中a
第i个元素,指向( a
本身不是指针,但数组下标操作符在指针上工作,就好像它们是数组一样)。 然后,您取消引用该复杂类型,这是无效的。 只需删除*
。
你可以在这里看到最终的代码。
您可能想要使用它:
#include <complex>
int main()
{
std::complex<float> *a;
std::complex<float> *b;
std::complex<float> array1[20];
std::complex<float> array2[20];
int real_part_array1[20];
int real_part_array2[20];
int imag_part_array1[20];
int imag_part_array2[20];
a = array1;
b = array2;
int i=0;
for (i=0;i<=19;i++)
{
real_part_array1[i] = std::real(a[i]);
imag_part_array1[i] = std::imag(a[i]);
real_part_array2[i] = std::real(b[i]);
imag_part_array2[i] = std::imag(b[i]);
}
return 0;
}
复杂不是一种类型,而是一种类型模板。 因此,您可能想要使用类似复杂的<int>或复杂的<double>。
std :: real和std :: imag也是在std命名空间中的真实和形象。
现在,当你说a =&array1时,array1已经是一个指针,你正在为指向LHS的指针指定一个指针,这是一个指针,这是一个类型错误
链接地址: http://www.djcxy.com/p/24379.html