Fehlende Speicherklasse oder Typbezeichner
-
Hallo!
Ich bekomme einen Linker Error, habe aber keine Ahnung wieso...
Der Code:
// 3DScenario.h class C3DScenario { public: pointvertex* punkte; ... // Hier ist die komplette Klasse definiert. Ich weiß, dass das eigentlich in die cpp-Datei gehört, aber wenn ich es dort hineinschreibe bekomme ich etwa 100 Fehler zusätzlich ("error C2143: Syntaxfehler : Fehlendes ';' vor '}'") }; C3DScenario *Scenario; // Space3D.h // Hier stehen sämtliche Includes, am Schluss wird mein Header eingebunden: #include "3DScenario.h"
Mein Problem: "error C2501: 'pointvertex' : Fehlende Speicherklasse oder Typbezeichner"
Obwohl pointvertex in einer Header-Datei steht, die oberhalb von 3DScenario.h inkludiert ist!
Und wenn ich eben jene Header-Datei einbinde, in der pointvertex definiert ist, erhalte ich "Neudefinition" - Fehler.Das ist mein erstes Projekt, bei dem ich das "richtige" C++ - Konzept anwende (wo Deklarationen und Definitionen in .cpp und .h - Dateien aufgeteilt werden)...daher auch die Probleme...
Ich verwende übrigens Visual C++ 6.0.
Danke schonmal!
Tubos
-
Benutzt du die Includeguards
#ifndef #define #endif ?
-
Ja, ich benutze die Includeguards.
Habe noch ein paar Dinge probiert:
Wenn ich die Datei inkludiere, in der pointvertex definiert ist (sie heißt VertexFormats.h), findet er wieder andere Bezeichner nicht.
Ich habe jetzt VertexFormats.h in VertexFormats.cpp und VertexFormats.h aufgeteilt.
Hat aber auch nichts gebracht.Habe jetzt auch 3DScenario in eine .h und eine .cpp aufgeteilt - jetzt bin ich bei 160 Fehlern:
3dscenario.h(46) : error C2501: 'VERTEXBUFFER' : Fehlende Speicherklasse oder Typbezeichner
...
3DScenario.cpp(6) : error C2065: 'pointvertex' : nichtdeklarierter Bezeichner
...
error C2143: Syntaxfehler : Fehlendes ';' vor '}' (<-- ungefähr 30 mal)
...
VertexFormats.cpp(14) : error C2501: 'D3DXVECTOR3' : Fehlende Speicherklasse oder Typbezeichner
-
Tubos schrieb:
Das ist mein erstes Projekt, bei dem ich das "richtige" C++ - Konzept anwende
Tatsächlich? Sieht man deinem Code gar nicht mal an.
Irgendwie scheinst du 'ne seltsame Mischung aus Syntax Fehlern und Verständnisproblemen zu haben. Und ohne die komplette Struktur deines Codes zu kennen, kann dir wahrscheinlich auch niemand wirklich weiterhelfen.
Ein Tipp trotzdem noch, bevor du irgendwelche Bezeichner nutzt, solltest du auch die Header-Datei einbinden, in der sie definiert werden.
-
Hi,
du machst dir keine große Mühe es besonders übersichtlich darzustellen, jedenfalls blicke ich kaum noch durch und andere werden sich auch kaum Mühe machen sich jetzt große Übersicht zu verschaffen.
Grundsätzliches:
* Inkludiere alle Header, in der die benötigten Typen deklariert sind
* Neudefinitionen schaltest du mit Include-Guards aus
* gibt es bidirektionale AssoziationenBeispiel schrieb:
header1.h:
#include "header2.h" class Class1 { private: Class2* class; };
header2.h:
#include "header1.h" class Class2 { private: Class1* class; };
so nutze Forward-Deklarationen:
#include "header2.h" class Class1 { private: Class2* cl; };
header2.h:
class Class1; #include "header1.h" class Class2 { private: Class1* cl; };
Und das richtige C++-Konzept gibt es schon Mal gar nicht, es gibt nur ein paar Konventionen, an die man sich halten sollte, weil es sich als das Logischste herausgestellt hat, aber die machen auch noch kein Konzept.
MfG Eisflamme
EDIT: Nachtrag und Korrektur
EDIT2:Noch eine Korrektur
-
Irgendwie scheinst du 'ne seltsame Mischung aus Syntax Fehlern und Verständnisproblemen zu haben.
Ja, Verständnisprobleme habe ich auf jeden Fall...
Inkludiere alle Header, in der die benötigten Typen deklariert sind
Das hat mir geholfen!
Habe die benötigten Header überall eingebunden, wo diese Typen benötigt werden.
Wenn man sich an diese Konvention haltet, dann kann man ja Header beliebig oft einbindenDanke!