C ++中的复杂数组 - 真实部分,成像部分

时间:2013-09-17 17:22:40

标签: c++ arrays complex-numbers

请帮助我解决C ++中复杂数组的问题?如果我有一个cmplx数的Arr [N]数组,现在我需要Arr [i]的实部。在标题中有一个复杂的数组CompArray定义为

cmplx** CompArray;

然后我将它分配给维度[nmax] [nmax]

然后我有一个function1,我只使用其中的一部分并编写

myclass::function1(double* realArray)
realArray = new double [nmax];
cmplx* ComplexArray [nmax];
ComplexArray[] = CompArray[10][];
for(int i=0;nmax;i++){
    realArray[i] = ComplexArray[i].real();
}

我收到错误:

error: expression must have class type

real()或imag()函数的错误是相同的

1 个答案:

答案 0 :(得分:1)

cmplx* ComplexArray [nmax];

这不是一个复数的数组;它是一个指向数字的指针数组。看起来你需要一个指向(第一个)数字数组的指针:

cmplx* ComplexArray = CompArray[10];

然后ComplexArray[i]是一个复数(带有“类型”的表达式)。

一旦你解决了这个问题,这看起来有点狡猾:

realArray = new double [nmax];

您已经传递了一个指针,然后将其丢弃并分配一个新数组。调用者不会看到该数组,所以你所做的就是泄漏内存。你可以通过引用传递指针,或者从函数返回它;这样调用者至少会得到结果。

但是,将原始指针传递给动态内存并希望它们在正确的时间被删除是一个坏主意。相反,传递负责管理内存的对象;在这种情况下,容器是理想的:

std::vector<double> myclass::function1() {
    std::vector<double> realArray;
    cmplx* ComplexArray = CompArray[10];
    for(int i=0;i<nmax;i++){
        realArray.push_back(ComplexArray[i].real();
    }
    return realArray;
}