Problem mit Namespace und string
-
Hallo,
über die Suchfunktion habe ich leider nichts zu meinem Problem gefunden
Ich habe eine Class CCharacter, die ein privates Feld mRace vom Datentyp string bekommen soll
#if !defined (__CHARACTER__H) #define __CHARACTER__H #include ".\includes.h" class CCharacter { public: CCharacter(void); ~CCharacter(void); private: // Rasse, die dieser Charakter repräsentiert string mRace; }; #endifDieser wahnsinnig spannende Code entstammt der CCharacter.h. In der includes.h will ich die Includes sammen, die ich häufig brauche.
#if !defined(__INCLUDES__H) #define __INCLUDES__H #include <string.h> using namespace std; #endifLeider kann ich das ganze nicht compilieren, denn ich bekomme die netten Fehlermeldungen
Es existiert kein namespace std
; fehlt vor Bezeichner mRace
Kann mir jemand verraten, was ich falsch mache?
Danke
BlackVampire
-
1. Die Klasse string ist in der Datei <string>, <string.h> sind die C-Funktionen == <cstring>
2. Man öffnet Namespaces niemals in einem Header, erst Recht nicht im globalen Namensraum. Benutze std::string.
/edit Noch was:
3. Namen die mit _ beginnen sind für den Compiler reserviert (auch Include-Guards)
4. .\ ist vollkommen unnötig.
-
Gehe direkt ins C++ Tutorial. Gehe nicht zu Dingen die du noch nicht kannst, und ziehe kein Lob von Scriptkiddys ein.
-
merci werde ich versuchen
-
Neben Witzen, die mehr oder minder Geschmackssache sind, scheint wohl mein VisualStudio einige Probs zu haben
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\iosfwd(226): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'not_eof'
in einer Datei iosfwd
Scheint so, als dürfte ich da einiges neu installieren

toll...
-
Man bekommt solche Fehlermeldungen auch mit einem korrekt installierten System hin. Beispielsweise folgender code:
class Hi { } #include <iosfwd>Produziert hier:
> g++ -c ttt.cpp /usr/include/c++/4.0.2/iosfwd:43: error: ‘#pragma’ is not allowed here /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h:1381: error: ‘__gnu_debug_def’ is not a namespace-name /usr/include/c++/4.0.2/x86_64-suse-linux/bits/c++config.h:1381: error: expected namespace-name before ‘;’ token(wo der Fehler liegt, lasse ich hier mal offen
)Übrigens verwende ich nie using namespace. Ich finde dieses Sprachkonstrukt überflüssig. Es hebt nur die Vorteiler der namespaces auf. In Headern darf man es sowieso nicht verwenden, dann möchte ich das auch nicht im Cpp. Ich habe mir die voll qualifizierten Namen angewöhnt. Da habe ich im Header und Cpp dann den gleichen Stil.
Tommi
-
tja. mein prob wurde durch eclipse gelöst.
microsoft verdient halt doch den namen microschritt, wenn die software so anfällig für veränderungen ist.das mit den namespaces: ja ich habe es mir gemerkt
(nix für ungut, wurde hier nur schon erwähnt) und die sache mit nem include nach der class, darauf bin ich noch garnicht gekommen, sowas ausprobieren zu wollten. ich liebe die ordnung in meinen programmen 
trotzdem danke für eure hilfe
BlackVampire
-
BlackVampire schrieb:
... und die sache mit nem include nach der class, darauf bin ich noch garnicht gekommen, sowas ausprobieren zu wollten. ich liebe die ordnung in meinen programmen

Das hast du meistens zwangsläufig. Wenn du zwei header in denen klassen deklariert sind nacheinander includest ist das nichts anderes. tntnet wollte auf das vergessene semikolon hinaus. Das ist ein fehler den man sich merkt und sofort mit solchen fehlermeldungen wie deiner in verbindung bringt.
greets
-
ok, klaro... das bringt natürlich Fehler.
Trotz allem, hab ich im Internet gelesen, dass man MS VisualStudio.NET 2003 am besten dann installiert, wenn Windows gerade neu installiert wurde. Sonst kann es zu fehlern kommen.
Wie auch immer. Mit Eclipse funktioniert alles bestens.