Trotz using namespace std...



  • Sw00sh schrieb:

    obwohl ich den namespace std verwende muss ich

    std::complex<double>
    

    in meiner Klasse verwenden.
    Bei list geht es ohne std.

    1. Was für ein Fehler zeigt der Compiler an, wenn du ersteres schreibst?
    2. using namespace ist hoffentlich:
    a) in keinem Header [darauf deutet dein "in einer Klasse"] *
    b) hinter allen Includes

    cu André
    * Bitte NIEMALS wegen Schreibfaulheit innerhalb von Headern (bzw. includierten Dateien) "using namespace" verwenden. Das macht das Konzept der Namensräume hinfällig.



  • Mein Header zur klasse sieht so aus:

    #include "MMRTImage.h"
    #include "MMRTQMap.h"
    #include "MMRTImageFFT.h"
    #include "Thresholding.h"
    
    #include <complex>
    #include <list>
    

    (in keinem Header ist using namespace std;)

    In der cpp sieht es so aus:

    #include "MMRTTemplateMatching.h"
    
    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    

    Fehler: Fehler 22 error C2872: '_complex' : ambiguous symbol ... 341

    Irgendwas ist da doppeldeutig... nur was 🙂

    Grüße,
    Kai



  • Irgendeiner der anderen Header, welche Du inkludierst, definiert ebenfalls einen complex-Type (vmtl. die FFT) im globalen Namensraum.
    Da Du Dir mit using namespace std alles aus std in den globalen Namensraum holst, kommt es zu der Fehlermeldung. Also musst Du std:: immer explizit qualifizieren.



  • Na. Du includest irgendwo etwas, was auch Complex heisst.. (Mach using weg und wenn du eine gute IDE hast, kannst du rechtsklick machen und zur Definition springen.)



  • hmm ich include nur 1 mal complex in einem header un da auch ohne namespace

    #ifndef __MMRTImageFFT__
    #define __MMRTImageFFT__
    
    #include <complex>
    
    class MMRTImageFFT{
    private:
    	std::complex<double>* imageData;
    	int width;
    	int height;
    	int length;
    	char* name;
    
    public:
    	MMRTImageFFT(void);
    	MMRTImageFFT(int width, int height, int* pImageData, char* name);
    	~MMRTImageFFT(void);
    	std::complex<double>* getImage(void);
    	int getWidth(void);
    	int getHeight(void);
    	char* getName(void);
    };
    #endif
    

    Hier kommt dann alles zusammen:

    #include "MMRTImage.h"
    #include "MMRTQMap.h"
    #include "Thresholding.h"
    #include "MMRTImageFFT.h"
    
    #include <list>
    

    und in den einzelnen cpp's kann ich noch normalerweise using namespace std; machen ohne, dass das Auswirkungen hat oder?



  • Das mit der FFT wahr nur eine Vermutung, da ich dachte, der Header käme nicht von Dir.
    Zeig mal die genaue Zeile, in der der Fehler zustande kommt.



  • z.B.

    this->imageData = new complex<double>[this->length];
    

    in

    MMRTImageFFT::MMRTImageFFT(...)
    


  • in der cpp verwende ich using namespace std



  • Ja, das sollte so schon funktionieren. Schau mal zwischen was sich der Compiler nicht entscheiden kann. Normalerweise sagt er dir das ja. Und dann findest du schnell heraus, von wo das es kommt.
    An irgendwelchen (fehlenden) Includeguards wirds ja nicht liegen..



  • Sw00sh schrieb:

    z.B.

    this->imageData = new complex<double>[this->length];
    

    in

    MMRTImageFFT::MMRTImageFFT(...)
    

    Zeig mal den ganzen Konstruktor.



  • MMRTImageFFT::MMRTImageFFT(int width, int height, int* pImageData, char* name){
    	this->width = width;
    	this->height = height;
    	this->name = name;
    	this->length = width * height;
    	this->imageData = new complex<double>[this->length];
    }
    


  • das sieht komisch aus

    http://www.harady.de/test/bild.gif



  • Sw00sh schrieb:

    das sieht komisch aus

    http://www.harady.de/test/bild.gif

    Jop. Und das wird in math.h aufgelöst..



  • hmm ich includiere kein math.h oder cmatch :P...
    hmpfg 😞


Anmelden zum Antworten