Namespaces in XCode
-
Hallo,
ich weiß nicht ob das das richtige Forum ist. Es geht ja um C++ aber ich glaube irgendwie dass es ein Compilerproblem ist, aber sicher bin ich mir nicht. Also ggfls. bitte ins richtige Forum ziehen.

So, zum Problem. Also, ich habe ein großes Projekt. Ein Teil des Projekts verwendet einen eigenen namespace. Nun murkst der XCode compiler (neueste Version) rum, wenn ich meinen Code kompilieren will. Zur Info unter Windows in Visual C++ und in Codwarrior 8 WIN kompiliert der Code problemlos!
Hier mal eine Pseudostruktur der Namespace dateien.
ownvector.h
ownmatrix.h
ownobjects.h
owncombiner.h
ownmaster.hJede Datei ist im Namespace deklariert und zwar in folgender Pseudoform:
#headerdefine //forward declaration namespace XYZ { class nameClass; } #include "necessary.h" namespace XYZ { class nameClass { [...] }; } #endifnatürlich sind Template Klassen entsprechend deklariert.
Kurz zwischengeschoben, der Master ist die Klasse wo das meiste berechnet wird und die anderen Klassen sind objekte die Unteraufgaben erfüllen...quasi.

Manche der Klassen, benötigen jedoch den Master um einige Berechnungen durchzuführen. Ok, also hab ich mir gedacht, dass ich einfach einen Pointer des Master objekts bei Konstruktion übergebe und dieses dann genutzt wird.
namespace XYZ { class className; //class Master; } #include "necessary.h" //#include "master.h" namespace XYZ { class className; { void TestFunction() { m_ptr->Do(); //Error Message, Master not defined } [...] private: XYZ::Master* m_ptr; }; }Und hier kommt das Problem auf. Der XCode Compiler sagt mir dass die Klasse "Master" undefiniert ist, und an der Stelle wo ich auf den Pointer zugreifen will gibts nen Kompilierungsfehler. Dürfte doch eigentlich kein Problem sein (ist es auch nicht bei den anderen Compilern) oder?
Ich hatte dieses Problem mal mit Codewarrior, da hat er auch wirre Errors rausgeworfen bei Verwendung des Namespaces. Das Problem war, dass ich
#include <vector>genutzt habe!
Nachdem ich stattdessen
#include <iostream> using namespace std;verwendet habe, ging es tadellos.
Versteh ich auch nicht ganz, aber naja. Aber wenn ich das in XCode mache, erhalte ich um so mehr Fehler. Argh, was ist los mit diesem Compiler? (Aber ich bin gezwungen ihn zu nutzen).Nun gut, ich hoffe es wurde einigermaßen klar, was das Problem ist (obwohl es mir selber ja auch nicht ganz klar ist WO das Problem genau liegt) und hoffe dass mir jemand helfen kann. Das muss nämlich vor Weihnachten gelöst werden das Problem.

JEDE Hilfe, jeder Tipp, jeder Vorschlag ist herzlich Willkommen!
Danke bereits
Gruss
Samir
-
So ganz werde ich aus deiner Fehlerbeschreibung nicht schlau (ein compilierbares/bzw. nicht-compilierbares Minimalbeispiel wäre besser gewesen) und von XCode habe ich noch nie etwas gehört.
Was mir allerdings auffällit, ist diese Zeile:
//#include "master.h"Wenn die auskommentiert ist, kann das hier:
m_ptr->Do();natürlich nicht funktionieren. Der Compiler kann schließlich nicht wissen, daß die Klasse Master eine Funktion namens Do hat.
Abgesehen davon sehen mir die Forward-Deklarationen in deinem Quelltext bestenfalls reichlich überflüssig aus.
-
Z2 schrieb:
So ganz werde ich aus deiner Fehlerbeschreibung nicht schlau (ein
compilierbares/bzw. nicht-compilierbares Minimalbeispiel wäre besser gewesen)genau
und von XCode habe ich noch nie etwas gehört.
Apple Software Entwicklugsumgebung Mac OS X (glaub ab 10.4)
-
Ja das ist was zwar für den Mac aber normalerweise mit GCC.
-
Danke erstmal für eure Antworten.
Z2 schrieb:
So ganz werde ich aus deiner Fehlerbeschreibung nicht schlau (ein compilierbares/bzw. nicht-compilierbares Minimalbeispiel wäre besser gewesen) und von XCode habe ich noch nie etwas gehört.
Da ich nicht weiß wo der Fehler liegt, kann ich leider auch kein Beispiel aufführen. Sonst bräuchte ich ja nicht mehr danach fragen.

Was mir allerdings auffällit, ist diese Zeile:
//#include "master.h"Wenn die auskommentiert ist, kann das hier:
m_ptr->Do();natürlich nicht funktionieren. Der Compiler kann schließlich nicht wissen, daß die Klasse Master eine Funktion namens Do hat.
Hmm, also ich dachte, sobald sie in einem Namespace liegen ist die Forwarddeklaration ausreichend, so dass die Klasse weiß, dass es diese Master klasse im namespace gibt und definiert ist. Oder habe ich da ein falsches Verständnis von einem Namensraum? Eine Klasse die in einem Namensraum definiert wurde, sollte doch problemlos in dem selbigen Namensraum genutzt werden können oder? Siehe Signatur.

Aber mal davon abgesehen, auch wenn ich die Header-Datei von master.h mit reinnehme macht es keinen Unterschied. Ich erhalte die selben Fehlerbeschreibungen beim Kompilieren. Deswegen hab ichs mal ganz frei weg auskommentiert.
Any idea?Abgesehen davon sehen mir die Forward-Deklarationen in deinem Quelltext bestenfalls reichlich überflüssig aus.
hmm, wenn ich keine Forward-Deklarationen mache, dann wissen die anderen Klassen im Namensraum doch gar nicht, dass es diese Klassen gibt (und ich erhalte einen Kompilierfehler). Also Prototypen der Klassen im Namensraum. Sollte das selbe wie Funktions-prototypen sein.
Verstehe ich die Namensräume vielleicht falsch? Ich habe noch nicht so oft damit gearbeitet.
-
Checker&Murckser schrieb:
Apple Software Entwicklugsumgebung Mac OS X (glaub ab 10.4)
Genau. Seit 10.4 auch für universal binary.
-
Checker&Murckser schrieb:
Apple Software Entwicklugsumgebung Mac OS X (glaub ab 10.4)
Furchtbare Software.

-
Konrad Rudolph schrieb:
Checker&Murckser schrieb:
Apple Software Entwicklugsumgebung Mac OS X (glaub ab 10.4)
Furchtbare Software.

LOL, recht hast du!
Aber einige der IDE eigenschaften sind schon sehr fein, das kann ich nicht abstreiten. Aber was soll ich machen, die Leute für den MAC wollen auch ihren Anteil. 