2016-04-07 6 views
1

Ich möchte ein FFT in meinem C++ - Projekt, und zeigen Sie es anschließend als ein Bild. Um das fft zu machen, benutze ich fftw ++, und um das Bild anzuzeigen, wollte ich die CImg-Bibliothek benutzen. Also habe ich mit dem Demo-Projekt von here angefangen. Bei der Zusammenstellung funktioniert alles. Sobald ich die CImg-Header hinzufügen, schlägt es mit dem FehlerKombination von CImg und FFTW ++ schlägt fehl

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

Meine Datei

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

wie

aussieht und mit

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

Mein g ++ Version 4.8 zusammengestellt. 5. Hinzufügen der Complex.h-Header hilft auch nicht. Was kann ich tun, um beide Bibliotheken zu kombinieren?

Edit: Weitere Untersuchungen zeigen, dass die C-Bibliothek complex.h und CImg.h Ergebnisse in vielen Kompilierung Probleme bei der Verwendung der Bibliothek Complex.h aus den fftw++ -package Ergebnisse auch in Fehler, nur die complex -include von C++ Kombination verwendet werden kann, zusammen mit der CImg.h -include-Datei. Grund: Bisher unbekannt.

+0

Befreien Sie sich von all dem übermäßigen Gebrauch von 'using namespace ...' für einen Anfang ... –

+0

@PaulR: Behoben, ich habe es vorher gelassen, um so nah wie möglich am Original zu bleiben. Immer noch das gleiche Problem –

+0

Meine Vermutung wäre, dass "Complex" an mehr als einem Ort definiert ist, aber ich bin nicht * au fait * mit CImg oder fftw ++. –

Antwort

1

Meine Lösung (auch wenn es nicht perfekt ist) ist, dass ich eine zweite cpp-Datei erstellt:
second.cpp:

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

und eine Include-Datei für die:
Sekunde. h:

#ifndef SECOND_H 
#define SECOND_H 

void example(void); 


#endif /* SECOND_H */ 

Wenn ich nur enthalten, die Include-Datei statt CImg.h, kann ich sowohl fftw++ und CImg verwenden.