-1

请你能帮我解决我在 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() 函数的错误是相同的

4

1 回答 1

2
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;
}
于 2013-09-17T17:27:02.120 回答