list benutzen schlägt fehl, Syntaxfehler?
-
Hallo zusammen,
ich versuche gerade eine einfache verkettete list aus der std einzubinden, aber irgendwie schlägt das immer fehl, ich bekomme einen Syntaxfehler
1>c:\...\deck.h(8) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
der code dazu:
#include "stdafx.h" namespace game { class deck { private: list<card*> myDeck; public: deck(void); ~deck(void); int createdeck(void); }; }in der stdafx.h ist das #include <list>
Wenn ich nun vor list noch std:: ergänze meckert er, dass std keine Klasse oder Namespace ist.
Ich hoffe mir kann jemand weiterhelfen?
-
versuchs mal mit ::std::list, klappt das?
-
leider nicht:
1>c:\dokumente und einstellungen\ralph\eigene dateien\visual studio 2008\projects\poker\poker\deck.h(8) : error C3083: "std": Das Symbol links neben "::" muss ein Typ sein.
1>c:\dokumente und einstellungen\ralph\eigene dateien\visual studio 2008\projects\poker\poker\deck.h(8) : error C2039: 'list': Ist kein Element von '`global namespace''
1>c:\dokumente und einstellungen\ralph\eigene dateien\visual studio 2008\projects\poker\poker\deck.h(8) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
-
#include <list> fehlt.
Edit: Hups, zu schnell geantwortet.
Aber probier doch mal das #include <list> direkt im Header, und nicht in der stdafx.h zu machen. Ansonsten kannst du auch mal den Inhalt von der stdafx.h zeigen.
-
hilft leider auch nicht.
hier einmal der inhalt der stdafx.h:
#include "enums.h" #include "functions.h" #include "player.h" #include "card.h" #include "deck.h" #include <list>ich hab ja jetzt schon einiges mit C++ gemacht, aber sowas widerspenstiges ist mir noch nicht widerfahren. Oder sehe ich den Wald vor lauter Bäumen nicht?

-
Diese Reihenfolge dürfte wohl eher hinderlich sein:
#include "deck.h" #include <list>Ich weiss gar nicht, darf man eigentlich ein Header in den vorkompilierten Header nehmen und den vorkompilierten Header in den ersteren einfügen?
Naja, auch wenn das geht, dann musst du wohl zumindest#include <list>vor#include "deck.h"nehmen.Grüssli

-
doesn't work either.
Ich bekomme immer noch denselben Syntax-Fehler.Den vorkompilierten Header habe ich aus meinem Header auch mal rausgenommen und nur durch #include <list> ersetzt, aber er meckert (leider) immer noch.
-
Kannst du genau sagen, was du gemacht hast? Die Reihenfolge ist nämlich extrem entscheidend. Am besten du lässt
#include <list>im vorkompilierten Header drin, nimmst dafür#include "deck.h"raus. Indeck.hfügst du ein#include "stdafx.h"ein.Also ca. so:
deck.h#include "stdafx.h" namespace game { class deck { private: std::list<card*> myDeck; public: deck(void); ~deck(void); int createdeck(void); }; }stdafx.h
#include <list> #include "enums.h" #include "functions.h" #include "player.h" #include "card.h"Ehm, ich hoffe mal, dass
player.h,card.h,functions.hundenums.hdas Filedeck.hnicht inkludieren? Sonst hast du sehr wahrscheinlich wieder ein Problem.
Wie ich schon sagte, ich glaube im vorkompilierten Header dürfen keine Header aus dem eigenen Projekt rein. Zumindest habe ich das so in der Erinnerung.Grüssli
-
wunderbar, ich habe deck.h aus dem vorkompilierten header entfernt und unter #include "stdafx.h" dann #include "deck.h" geschrieben.
War doch scheinbar die Reihenfolge. Merci!
-
Ich würd so oder so, egal was im vorkompilierten header drin ist und was nicht, alle header die du in einem Stück code benutzt, dort auch explizit mit einbinden.
Davon abgesehen ist es erstens sowieso gegen den Sinn von vorcompilierten Headern, dort Header einzutragen die noch in der Entwicklung sind: jedesmal wenn der Header in Entwicklung eine Änderung erfährt, muss der vorcompilierte Header neu compiliert werden. Der Sinn ist ja aber gerade, dass er nicht ständig neu compiliert werden muss. Ich würd dort also nur Header einbauen die ich nicht anfasse, z.B. third party APIs.
Eigene Header haben dort meines Erachtens nichts drin verloren, denn entweder sind sie noch in Bearbeitung, oder sie sind fertig, so dass die entsprechenden Übersetzungseinheiten nicht mehr neu übersetzt werden müssen - bei einem ordentlichen Buildtool und möglichst geringen Abhängigkeiten im Code (keine unnötigen #includes, ggf. forward-declarations).
Dann bezweifle ich, dass es sinnvoll ist, Header der STL in den vorcompilierten einzutragen. Templates kann man schließlich nicht compilieren, bevor sie instantiiert wurden.
Ich selbst benutze generell keine vorcompilierten Header. Erstens weil ich darauf achte, möglichst wenig Abhängigkeiten zu haben (und vorcompilierte Header bauen eher noch mehr Abhängigkeiten ein), und zweitens weil sich vorcompilierte Header erst bei Projekten lohnen dürften, die einiges größer sind als meine bisherigen projekte, und bei denen relativ viel Code von relativ vielen headern im vorcompilierten abhängig ist.