Namespace-Verschachtelung, MSVC
-
Hi Leute,
ich versuche gerade ein Client-Server-Programm zu schreiben, dabei soll der Server auf einer Linux- und der Client auf einer Windows-Platform laufen. Für dieses Projekt erstelle ich eine eigene Boost-Bibliothek. So jetzt zu meinem Problem: auf der Linux-Seite hat das Erstellen dieser Bibliothek ohne Probleme funktioniert. Auf der Windows-Seite bekomme ich eine Menge komischer Fehler-Meldungen. Wie z.B.:
error C2589: '(': Ungültiges Token auf der rechten Seite von '::'
error C2143: Syntaxfehler: Es fehlt ';' vor '::'
error C2059: Syntaxfehler: '::'
error C2143: Syntaxfehler: Es fehlt ';' vor '{'
error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?und das alles zu dieser Zeile:
void SystemClientSide::setHomeLeft(const JointPose& pose) { ... }Die Klasse SystemClientSide ist in einem namespace deklariert und vor dem Aufruf noch ein weiterer verschachtelter namespace deklariert wird, in dem eine Header-Datei eingebunden wird (include). In setHomeLeft() werden einige Funktionen bezutzt, die dort beschrieben sind. Diese Trennung muss leider sein.
Verschachtelung sieht etwa so aus:
{ namespace abc{ namespace bac{ #include "x.h" } void SystemClientSide::setHomeLeft(const JointPose& pose){ Client cln; int* a; char* c; a=bac::func(b, cln); ... } ... } }Der Originalcode ist zu komplex den hier vollständig zu posten. Spielt, denke ich mal, auch keine Rolle.
Kann es sein, dass der Compiler mit dieser Verschachtelung ein Problem hat? Jedenfalls wenn ich diesen verschachtelten namespace auskommentiere, dann kann der Compiler zwar die besagten Funktionen nicht finden aber die komischen Errors sind auch weg…In dieser Klasse werden noch weitere Funktionen beschriebe und die Fehlermeldungen erscheinen überall da, wo ein Aufruf steht.
Wäre echt schön, wenn jemand eine Idee hätte, wie man es lösen könnte. Und wie gesagt, unter Linux lief der selbe Code ohne Probleme. Danke.
-
Welcher Compiler?
-
Sorry Martin, konnte erst jetzt deine Frage lesen...
Der Compiler steht in der Themenbeschreibung - MSVC, also der Visual Compiler :). Habe auch mit MinGW/GCC versucht, hat leider auch nicht funktioniert.
-
Hat denn gar keiner eine Idee? Echt Schade…
-
Nö. Steht da nicht. Du hast nur gesagt es ist ein MS Compiler?
VC6- Der Millionen von Bugs hat?
VC2003, 2005, 2008, 2010?Klammern falsch geschachtelt?
setHomeLeft ist evtl. ein Identifier und keine Funktion?
Falscher define auf setHomeLeft?Millionen von Möglichkeiten.
Kristallkugeln sind in diesem Forum, seit dem ich hier bin nicht aufgetaucht, bzw. hat noch keiner zugegeben, dass er eine hat...
-
Martin Richter schrieb:
Nö. Steht da nicht. Du hast nur gesagt es ist ein MS Compiler?
VC6- Der Millionen von Bugs hat?
VC2003, 2005, 2008, 2010?OK. MSVC-9.0, Visual Studio 2008. Aber wie gesagt mit MinGW/GCC hat es auch nicht funktioniert.
Martin Richter schrieb:
Klammern falsch geschachtelt?
setHomeLeft ist evtl. ein Identifier und keine Funktion?
Falscher define auf setHomeLeft?Das habe ich alles bereits überprüft. Außerdem sollte dann der Compiler auch auf der Linux-Seite meckern, oder? Und da lief es ohne Probleme. Eigentlich sollten da keine Probleme auftreten, und wenn man bei Microsoft nach diesen Fehlern sucht, gibt es dort auch sehr komische Lösungen bzw. Vorschläge, warum es zu diesen Fehlern kommt…
Mir ist bewusst, dass es alle möglichen Ursachen für diese Errors geben kann. Deshalb wollte ich wissen, ob jemand auch ähnliche Probleme (mit Boost, Windows/Linux-Compilern) gehabt hat und eventuell eine Lösung gefunden hat.
-
Diese Fehlermeldung kann IMHO nur kommen wen das Symbol setHomeLeft nicht als Name geparst werden kann, bzw. innerhalb des namespaces zum Beispiel schon ein enum ist...
Such doch bitte erstmal Deinen Code ab, um heraus zu finden was es mit setHomeLeft auf sich hat.
-
Hallo,
welche Dateiendungen hat deine Bibliothek?
MfG,
Probe-Nutzer
-
Hi,
Probe-Nutzer schrieb:
Hallo,
welche Dateiendungen hat deine Bibliothek?
Was meinst du noch mal?
Ich versuche eine unter Windows mit Boost zu erstellen. Unter Linux wurde eine mit .a erstellt.
-
Martin Richter schrieb:
Diese Fehlermeldung kann IMHO nur kommen wen das Symbol setHomeLeft nicht als Name geparst werden kann, bzw. innerhalb des namespaces zum Beispiel schon ein enum ist...
Könntest du das bitte etwas näher erläutern?
-
Meine Frage zielte darauf ab, ob vielleicht die betreffende Datei (die den Fehler verursacht, .c-Endung?) als C-Code interpretiert wird, und damit vom C-Compiler übersetzt wird, was evtl. auch zu diesem Fehler führen könnte, nur eine Vermutung, Idee...
MfG,
Probe-Nutzer
-
Probe-Nutzer schrieb:
Meine Frage zielte darauf ab, ob vielleicht die betreffende Datei (die den Fehler verursacht, .c-Endung?) als C-Code interpretiert wird, und damit vom C-Compiler übersetzt wird, was evtl. auch zu diesem Fehler führen könnte, nur eine Vermutung, Idee...
Danke. Mir ist jede Idee willkommen :). Es ist eine .cpp Datei.