Сложные массивы в реальной части, части imag

пожалуйста, вы можете помочь мне с моей проблемой со сложными массивами в C ++? Если у меня есть массив Arr [N] чисел cmplx, и теперь мне нужна вещественная часть 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

Решение

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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector