2012-03-04 80 views
1

私は自分のコードを実行しようとしていますが、配列を返す2つのメソッドを呼び出すすべての場所でエラーが発生しています。C3861:識別子が見つかりません。メソッドを返す配列C++

私はプログラミングを始めたばかりで、何が間違っているのか分かりません。

私は以下のコード全体を投稿しています。

// Test.cpp : Defines the entry point for the console application. 
#include "stdafx.h" 
#include <iostream> 
#include <cmath> 
#include <conio.h> 

using namespace std; 

int Log2(int n) 
{ 
int m; 
int ct = 0; 
m = n; 
while(m) 
{ 
    m = m >> 1; 
    ct++; 
} 
ct-=1; //correction step 

return ct; 
} 

int power(int n) 
{ 
int x = 1; 
    for (int i=0;i<n;i++) 
     x *= 2; 

    return x; 
} 

void FFT(short int dir,long m,double *x,double *y) 
{ 
int endoffile; 
    long n,i,i1,j,k,i2,l,l1,l2; 
    double c1,c2,tx,ty,t1,t2,u1,u2,z; 

    n = 1; 
n = power(m); 

double xreal[16];// = new double[n]; 
double xcomplex[16];// = new double[n]; 

    i2 = n >> 1; 
    j = 0; 
    for (i=0;i<n-1;i++) 
    { 
     if (i < j) { 
      tx = x[i]; 
      ty = y[i]; 
      x[i] = x[j]; 
      y[i] = y[j]; 
      x[j] = tx; 
      y[j] = ty; 
    } 
    k = i2; 
    while (k <= j) { 
     j -= k; 
     k >>= 1; 
    } 
    j += k; 
} 

for(int k=0; k<n;k++) 
{ 
double *find = getter(k, x, y, n); 
xreal[k] = find[0]; 
xcomplex[k] = find[1]; 
} 
if (dir=1) 
{ 
for(int k=0; k<n; k++) 
{ 
x[k] = xreal[k]; 
x[k]/=n; 
y[k] = xcomplex[k]; 
y[k]/=n; 
} 
} 
} 

double* getter(int k, double *x,double *y, int n) 
{ 
double realret = 0.0; 
double imagret = 0.0; 

for(int n2=0; n2<=n/2 - 1; n2++) 
{ 
    double *a = complexgetter(n/2,n2,k); 
    realret+=a[0] * x[2*n2]-a[1] * y[2 * n2]; 
    imagret+=a[1]*x[2*n2]+a[0]*y[2*n2]; 
} 
double *mult= complexgetter(n,1,k); 
for(int n4=0; n4<=n/4 - 1; n4++) 
{ 
    double *a = complexgetter(n/4,n4,k); 
    double tmpreal=a[0]*x[4*n4+1]-a[1]*y[4*n4+1]; 
    double tmpimag=a[1]*x[4*n4+1]+a[0]*y[4*n4+1]; 
    realret+=tmpreal*mult[0]-tmpimag*mult[1]; 
    imagret+=tmpreal*mult[1]+tmpimag*mult[0]; 
} 
mult=complexgetter(n,3,k); 
for(int n4=0; n4<=n/4 - 1; n4++) 
{ 
    double *a = complexgetter(n/4,n4,k); 
    double tmpreal=a[0]*x[4*n4+3]-a[1]*y[4*n4+3]; 
    double tmpimag=a[1]*x[4*n4+3]+a[0]*y[4*n4+3]; 
    realret+=tmpreal*mult[0]-tmpimag*mult[1]; 
    imagret+=tmpreal*mult[1]+tmpimag*mult[0]; 
} 
double *ret = 0;// = new double[2]; 
ret[0]=realret; 
ret[1]=imagret; 
return ret; 
} 

double* complexgetter(int N, int i, int k) 
{ 
double PI = 3.14159265358979323846; 

double value = -2*PI; 
value/=N; 
value*=i; 
value*=k; 
double *ret = 0; 
ret[0]=cos(value); 
ret[1]=sin(value); 
return ret; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
double x1[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 
double y1[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 
    // double y1[16] = {0}; 
int m1 = 4; 
int dir1 = 1; 

FFT(dir1, m1, x1, y1); 

    return 0; 
} 

以下は、私が得るエラーです。

test.cpp(67): error C3861: 'getter': identifier not found 
test.cpp(90): error C3861: 'complexgetter': identifier not found 
test.cpp(94): error C3861: 'complexgetter': identifier not found 
test.cpp(97): error C3861: 'complexgetter': identifier not found 
test.cpp(103): error C3861: 'complexgetter': identifier not found 
test.cpp(106): error C3861: 'complexgetter': identifier not found 

ご協力いただきありがとうございます。

答えて

2

問題が定義される前にgettercomplexGetterを使用しているという問題があります。基本的にC/C++は上から下にファイルを読み込みます。したがって、関数FFTでは、それはgetterの使用を見て、それが何であるか分かりません。メソッドの形状を処理するためにC/C++に指示するために、宣言を追加する必要があります。 FFT機能ここで終わりに

double* getter(int k, double *x,double *y, int n); 
double* complexgetter(int N, int i, int k); 

お知らせ;の上にこれを入れて

。これは宣言になります。基本的には、後でこの形状の関数を定義することをコンパイラに約束します

0

このコードにはメソッドはありません。関数は、使用する前に宣言する必要があります。再帰がない場合は単純です。最初に使用する前に関数を定義するだけです。

関連する問題