2016-04-07 19 views
1

C++ projemde bir fft yapmak ve daha sonra bir görüntü olarak göstermek istiyorum. Fft yapmak için fftw ++ kullanıyorum ve görüntüyü görüntülemek için CImg-kütüphanesini kullanmak istedim. Böylece here'dan demo projesi ile başladım. Onu derlerken, her şey çalışır. En kısa sürede ben CImg-header ekledikçe, buCImg ve fftw ++ kombinasyonu

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

Dosyam

#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); 
} 

benziyor ve

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

Benim g ++ sürüm 4.8 olduğu derlendi hata ile başarısız olur. 5. Complex.h başlıklı eklemek de işe yaramıyor. Her iki kütüphaneyi birleştirmek için ne yapabilirim?

Düzenleme: daha fazla araştırma hataları da fftw++ -package sonuçlarından kütüphane Complex.h birleştirerek derleme sorunların bir sürü C-kütüphanesi complex.h ve CImg.h sonuçlarını kullanarak, C++ 'dan sadece complex-Include kullanılabileceğini göstermektedir CImg.h -include dosyasıyla birlikte. Sebep: Bilinmeyen şu ana kadar.

+0

Başlamak için ad-soyadını kullanarak tüm bu çok ağır kullanımdan kurtulun ... –

+0

@PaulR: Sabit, orijinaline olabildiğince yakın kalmak için daha önce bıraktım. Hala aynı sorun –

+0

Benim tahminim Kompleks'in birden fazla yerde tanımlanmış olmasıydı, ama ben CImg veya fftw ++ ile * au fait * değilim. –

cevap

1

Çözümümün (mükemmel olmasa bile) ben ikinci cpp dosyası oluşturulur olmasındandır:
second.cpp:

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

ve bunun için bir içerme dosyası:
saniye. h: Ben yerine sadece CImg.h dosyayı içerdiğini eklerseniz

#ifndef SECOND_H 
#define SECOND_H 

void example(void); 


#endif /* SECOND_H */ 

, ben fftw++ ve CImg her ikisini kullanabilirsiniz.