将数组传递给函数的问题

时间:2013-10-07 15:46:11

标签: c++

我正在尝试传递一个复数的数组(我创建了一个名为Complex的类,只存储了一个真实和想象的部分)到我的下面的dft函数中并让它吐出一些结果。我尝试过多种变体x -include 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 个答案:

答案 0 :(得分:2)

您的dft函数不是Complex类的成员:

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

所以你不应该在holder对象上调用它,即代替holder.dft(x,N,n).getReal()执行:

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

还要考虑使用std::vector<Complex>而不是C风格的数组。

答案 1 :(得分:1)

您尝试将dft函数称为Complex类中的成员,但它是一个免费函数。你应该把它称为免费功能:

    Complex ans = dft(x,N,n);
    double ansRe = ans.getReal();
    double ansIm = ans.getImag();