#define Problem



  • Hi,
    ich will mir ein wenig Arbeit ersparen beim implementieren von Exceptions und habe mir dafür einen Macro erstellt.

    #define FC_IMPLEMENT_EXCEPTION(NAME)   \	
    NAME::NAME(std::string str,bool fPrintStacktrace)  \
    {                                                  \
    }                                                  \
    NAME::NAME(bool fPrintStacktrace)                  \
    {                                                  \
    }                                                  \
    NAME::~NAME() {                                    \
    }
    

    Aber aus irgendeinem Grund interpretiert Visual Studio NAME falsch und ich bekomme den Fehler "Ein Name gefolgt von :: muss ein Klassen oder Namespace Name sein"
    Ich habe den Code unter Qt Creator getestet und es hat wunderbar funktioniert. Warum?

    Über Antworten würde ich mich sehr freuen



  • Leerzeichen hinter den Backslashes? Nachdem ich sie entfernt habe, bekam ich keine Fehler mehr-



  • Hi,
    die Leerzeichen kommen durch das Forum. Ich habe meinen Code selber noch mal geprüft auf Tabs/Leerzeichen etc. leider war das nicht die Lösung des Problems

    //Edit: Hier ist ein Bild von dem was er mir ankreidet
    http://puu.sh/1FXfr



  • Das ist nur eine "Fehlermeldung" der IDE.
    oder übersetzt das Projekt nicht mit dem VC++?



  • Hi,
    doch tut es. Es gibt zwar einige Bugs mit diesen Fehlermeldungen, aber diesmal ist es "ernst". Ich folgende Fehler vom Compiler

    1>fcexception.h(105): error C2653: 'NAME': Keine Klasse oder Namespace
    1>fcexception.h(106): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>fcexception.h(107): warning C4508: 'NAME': Funktion sollte einen Wert zurückgeben; Ergebnistyp 'void' angenommen
    1>fcexception.h(108): error C2653: 'NAME': Keine Klasse oder Namespace
    1>fcexception.h(109): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>fcexception.h(110): warning C4508: 'NAME': Funktion sollte einen Wert zurückgeben; Ergebnistyp 'void' angenommen
    1>fcexception.h(111): error C2653: 'NAME': Keine Klasse oder Namespace
    1>fcexception.h(111): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.


  • Mod

    Zeig mal ein vollständiges Minimalbeispiel für den Code, der diesen Fehler verursacht. Siehe dritter Link in meiner Signatur.



  • Header:

    #define FC_DECLARE_EXCEPTION(NAME) \
    class NAME { \
    public:	\
    	NAME(bool = true); \
    	NAME(string,bool = true); \
    	virtual ~NAME(); \
    };
    
    #define FC_IMPLEMENT_EXCEPTION(NAME)   \  
    NAME::NAME(std::string str,bool fPrintStacktrace)  \
    {                                                  \
    }                                                  \
    NAME::NAME(bool fPrintStacktrace)                  \
    {                                                  \
    }                                                  \
    NAME::~NAME() {                                    \
    }
    
    FC_DECLARE_EXCEPTION(NBTIncompatibleTypeException)
    

    .cpp

    FC_IMPLEMENT_EXCEPTION(NBTIncompatibleTypeException)
    


  • mgaeckler hat recht. Die Leerzeichen nach \ in Zeile 9 müssen weg. Dann meckert VS nicht mehr.



  • Hi,
    es lag tatsächlich am Leerzeichen...
    Aus irgendeinem Grund habe ich die #define Zeile nicht auf Leerzeichen geprüft.

    Vielen Dank an die Supporter für ihre Arbeit


Anmelden zum Antworten