#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 Compiler1>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.
-
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