2016-04-07 16 views
1

私のC++プロジェクトでfftを行い、後で画像として表示したいです。 fftを行うために、私はfftw ++を使用しています。画像を表示するために、私はCImg-libraryを使いたいと思っていました。私はデモプロジェクトhereから始めました。コンパイルすると、すべてが機能します。できるだけ早く私はCIMG-ヘッダを追加すると、それはエラーで失敗しCImgとfftw ++の組み合わせが失敗します

test.cpp: In function ‘int main()’: 
test.cpp:18:12: error: ‘f’ was not declared in this scope 
    Complex *f=ComplexAlign(n); 

私のファイルは

#include "fftw++.h" 
#include "CImg.h" 
// Compile with: 
// g++ -I .. -fopenmp example0.cc ../fftw++.cc -lfftw3 -lfftw3_omp 

//using namespace std; 
//using namespace utils; 
//using namespace fftwpp; 
//using namespace cimg_library; 
int main() 
{ 
    fftwpp::fftw::maxthreads=get_max_threads(); 

    std::cout << "1D complex to complex in-place FFT, not using the Array class" 
     << std::endl; 

    unsigned int n=4; 
    Complex *f=utils::ComplexAlign(n); 

    fftwpp::fft1d Forward(n,-1); 
    fftwpp::fft1d Backward(n,1); 

    for(unsigned int i=0; i < n; i++) f[i]=i; 

    std::cout << "\ninput:" << std::endl; 
    for(unsigned int i=0; i < n; i++) std::cout << f[i] << std::endl; 

    Forward.fft(f); 

    std::cout << "\noutput:" << std::endl; 
    for(unsigned int i=0; i < n; i++) std::cout << f[i] << std::endl; 

    Backward.fftNormalized(f); 

    std::cout << "\ntransformed back:" << std::endl; 
    for(unsigned int i=0; i < n; i++) std::cout << f[i] << std::endl; 

    utils::deleteAlign(f); 
} 

のように見え、

g++ -I .. -fopenmp test.cpp ../fftw++.cc -lfftw3 -lfftw3_omp 

マイグラム++バージョンでコンパイルされている4.8です。 5。 Complex.h -headerを追加しても役に立ちません。両方のライブラリを組み合わせるためには何ができますか?

編集:さらなる研究はまた、エラーがfftw++ -package結果からライブラリComplex.hを組み合わせて、コンパイルの問題の多くのCライブラリcomplex.hCImg.h結果を用いて、C++からのみcomplex -includeを使用できることを示していますCImg.h -includeファイルと一緒に使用します。理由:今まで知らない。
second.cpp:

#include "CImg.h" 
//Code for images 
void example(void){ 
} 

とインクルードファイルそのため:
秒を

+0

は '名前空間を使用して、すべてのこと重い利きの使用を取り除く...'開始のための... –

+0

@PaulR:固定、私は可能な限りオリジナルに近い滞在するために、前にそれを残しました。それでも同じ問題 –

+0

私の推測では、 'Complex'は複数の場所で定義されていますが、CImgやfftw ++では* au fait *ではありません。 –

答えて

1

私のソリューションは、(それが完全でない場合であっても)私は2番目のcppファイルを作成したこと、です。 H:

#ifndef SECOND_H 
#define SECOND_H 

void example(void); 


#endif /* SECOND_H */ 

私は代わりにCImg.hのファイルが含まれている含まれている場合、私はfftw++CImgの両方を使用することができます。

関連する問題