Проблема передачи массива в функцию

0

Я пытаюсь передать массив комплексных чисел (я создал класс под названием Complex, который просто хранит реальную и воображаемую часть) в мою функцию dft ниже и заставляю ее выплевывать некоторые результаты. Я попробовал множество вариаций x -including x [], x [3], * x, чтобы попытаться передать массив данных в функцию dft, но я продолжаю получать "неопределенную ссылку на" Complex :: dft (Complex *, int, int) ".

Я извиняюсь заранее, если я только что сделал что-то действительно глупое и очевидное, но я смотрел на это часами и продолжал рисовать пробел. Любая помощь будет принята с благодарностью.

благодаря

Это моя функция dft:

#include <iostream>
#include "Complex.h"
#include "ofstream_add.h"
#include <cmath>
const double PI=4*atan(1.0);

Complex dft(Complex x[], int N, int n)
{
    Complex holder;
    Complex sum = Complex(0,0);
    Complex temp;

    for (int k=0; k<N; k++)
    {
        temp = Complex(cos(2.0*PI*k*n/N),-sin(2.0*PI*k*n/N));
        sum = sum + x[k] * temp;
    }
    double conv = N;  //convert integer to double as complex takes in doubles
    Complex complexN((1/conv),(1/conv));
    holder = complexN * sum;

    return holder;
}

Это моя основная программа:

#include <iostream>
#include <iomanip>
#include "Complex.h"
#include "ofstream_add.h"

int main()
{
    int N = 3;
    Complex holder;
    Complex y[N];
    double re,im,ansRe,ansIm;

    Complex a(2,1.7);
    Complex b(3.5,1.2);
    Complex c(4.2,2.3);
    Complex x[3] = {a, b, c};

    for (int n=0;n<N;n++)
    {
        //does some processing on the array of complex numbers an spits out a  
        //real and imaginary part
        double ansRe = holder.dft(x,N,n).getReal();
        double ansIm = holder.dft(x,N,n).getImag();

        //stores the result in a new complex number
        y[n].setReal(ansRe);
        y[n].setImag(ansIm);
    }
}
Теги:

2 ответа

2

Ваша функция dft не является членом класса Complex:

Complex dft(Complex x[], int N, int n)
{
    ...
}

поэтому вы не должны называть его объектом- holder, то есть вместо holder.dft(x,N,n).getReal() do:

double ansRe = dft(x,N,n).getReal();

Также рассмотрите использование std::vector<Complex> вместо массивов в стиле C.

  • 0
    Вызывающий код ожидает Complex - он вызывает getReal для него.
  • 0
    @Chowlett: Да, я редактировал это, когда ты писал :)
Показать ещё 1 комментарий
1

Вы пытаетесь вызвать функцию dft как если бы она была членом вашего класса Complex, но это бесплатная функция. Вы должны назвать это свободной функцией:

    Complex ans = dft(x,N,n);
    double ansRe = ans.getReal();
    double ansIm = ans.getImag();
  • 0
    Хорошо, спасибо, попробую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню