复数的实部和虚部

我有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以及函数realimag都位于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 ;`但是这对于习惯它可能是危险的。)

    关于realimag ,他们可以使用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

    上一篇: real and imaginary part of a complex number

    下一篇: Printing sum of double vector in gdb C++