syntaxfehler
-
C&P soll Copy und Paste bedeuten.
(Man erwischt manchmal nicht alle Zeichen oder bastelt das noch schnell zurecht und haut dabei einen Fehler rein).Da man nicht weiß was jetzt Zeile 8 bei Dir ist, kann man nur ein wenig raten.
Deine Fehlermeldungen deuten darauf hin, das ein Typ nicht bekannt ist.OrderedItem ist nicht bekannt. Du musst den Typ bekannt machen.
Entweder durch ein Include der Deklaration des Types oder durch eine Forwärtsdeklaration.
-
ok zeile 8 ist bei mir als //fehlerzeile gekennzeichnet. ordered item habe ich schon versucht mit include bekannt zumachen funzt aber auch nicht. was ist vorwärtsdeklaration? das PitPlaner::OrderedItem?
-
Die Fehlerzeile hatte ich zu spät gesehen, der Satz blieb bei der Umformulierung noch drinne.
using namespace System::IO; #include "stdafx.h" namespace PitPlaner{ public ref class ProjectFile{ public: OrderedItem ^xml; //Fehlerzeile public: void serializeObject( String^ filename, Object ^o); void deserializeObject(String ^file); }; }
In dieser Einheit ist OrderedItem völlig unbekannt. Entweder den Header includieren in dem OrderedItem deklariert ist oder die Forwärtsdeklaration verwenden. (Das geht aber nur, solange der Typ in dieser Einheit nicht verwendet oder mit gcnew angelegt wird.)
Eine Forwärtsdeklaration würde in Deinem Fall so aussehen:
using namespace System::IO; #include "stdafx.h" namespace PitPlaner{ ref class OrderedItem; // <<<<<< public ref class ProjectFile{ public: OrderedItem ^xml; //Fehlerzeile public: void serializeObject( String^ filename, Object ^o); void deserializeObject(String ^file); }; }
Benutze bitte C++ Tags, dann fallen Kommentare wie // Fehlerzeile besser auf
-
ref class OrderedItem;
klappt bis auf das das da kein public hindarf kannst du mir erklären was eine vorwärts deklaration ist. genauso komisch finde ich das ich die "stdafx.h" in den headern includen kann das aber nichts bringt. d. h. ich sammle die namespaces und includs in der stdafx.h und include in meinen cpp nur diese zwecks übersichtlichkeit sieht besser aus. aber in bezug auf die header bringt das nichts die benötigen immer wieder einen namespace wenn man einen verwendet z.b. den System::IO
-
Eine Forward Deklaration definiert nur den Namen einer Klasse, ohne weitere Aussagen über ihren Aufbau zu machen (das funktioniert analog zu einem Funktions-Prototyp). Damit kannst du z.B. Zeiger von diesem Typ definieren oder Funktionen, die ihn als Parameter/Rückgabetyp verwenden - aber du kannst nichts machen, was sich auf die Struktur oder Größe des Typs bezieht.
PS: Und deinen Header-Aufbau solltest du nochmal überdenken. Es mag ja ganz praktisch sein, alle irgendwo angelegten Header mit einem einzigen #include einzubinden, aber damit holst du dir im Endeffekt nur unnötige zierkuläre Abhängigkeiten, die du mühevoll suchen und korrigieren mußt.
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-170082-and-highlight-is-vorw�rtsdeklaration.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-169024-and-highlight-is-vorw�rtsdeklaration.html
Alles über stdafx zu sammeln ist ne schlechte Idee. Angefangen von unkontrollierbaren abhängigkeiten und lange Compilierzeiten...
Immer nur das Includieren was unbedingt benötigt wird. Spart ne menge Ärger.
C++ ist keine Bequeme oder "schaut schöner aus" Sprache. Das übersichtliche erkaufst Du Dir mir vielen schlecht vorhersehbaren Problemen.
-
so ganz hab ich das nicht verstanden warum brauch ich denn das für mein OrderedIUtem warum funktioniert das nicht ohne warum muss man noch mal einen klassen kopf extra deklarieren.
zirkuläreabhängigkeiten ich kann mir da zwar was drunter vorstellen aber weiß nicht wo es d zu einem problem kommen könnte wenn alle klassen alle imports bekommen, wenn welche nicht gebraucht werden dann muss man die ja auch nicht benutzen, also für den linker jetz gedacht.
-
Lies mal die Links und beschäftige Dich doch einfach mal ein wenig mit dem Thema. Ich glaube nicht das Du Dir das relativ große Thema innerhalb von 5 Minuten verinnerlicht hast.
-
nur noch kurz zu der stdafx.h.
ich benutze vs 2005 und wenn ich da ein neues project erstelle steht in der automatisch erzeugten stdafx.h folgendes:
// TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.
-
Ja, Zusatzbibliotheken wie <windows.h> oder DirectX, die vom gesamten Programm benötigt werden, kannst du gerne dort reinpacken (ich ignoriere die Datei normalerweise und packe jeden Header dort rein, wo er gebraucht wird). Aber wenn du alle deine Header dort einträgst (und jeder dieser Header wieder die stfafx.h inkludiert), verknotest du dich nur.