Strukturen und Strings
-
Hallo alle zusammen,
ich bin gerade dabei mich ein bißchen in c++ reinzuarbeiten. Nun versuche ich Strings zu deklarieren:
#include <string.h> struct options { string name; char *type; int defaultVal; char *help; char *verify; };Allerdings gibt es einen Compilerfehler beim übersetzen:
parse error before `string'
Und ich weiß nicht warum. Ich hoffe mir kann jemand helfen.
Dann habe ich noch ein zweites Problem. Ich versuche innerhalb einer Struktur eine Variable anzulegen, deren Datentyp wieder eine Struktur ist. Also ich habe eine Struktur (siehe oben) und dann versuche ich folgende Struktur anzulegen:
struct driverparam { char *name; options paramOptions; };Auch dort gibt es einen Compilerfehler:
parse error before `options'
Auch hier hoff ich auch eure Hilfe. Vielen Dank schon einmal im Voraus.
mfg chuqa
-
#include <string.h> #include <iostream> struct options { ::std::string name; char *type; int defaultVal; char *help; char *verify; }; struct driverparam { char *name; options paramOptions; }; int main(){ }Funktioniert bei mir..
-
Chuqa schrieb:
#include <string.h> struct options { string name; char *type; int defaultVal; char *help; char *verify; };Also bei mir ging es als ich es so abgeändert habe:
#include <string> // <string.h> ist veraltet -> nicht mehr benutzen struct options { std::string name; //namespace (std) angeben char *type; int defaultVal; char *help; char *verify; };
-
Hallo,
Ich glaube du suchst das:
#include <string.h> #include <iostream> using namespace std; struct options { ::std::string name; char *type; int defaultVal; char *help; char *verify; }; struct driverparam : options { char *name; options paramOptions; }; int main(){ driverparam b; b.defaultVal = 2; ::std::cout << b.defaultVal; }MFG winexec*
-
string.h ist ein ANSI-C Headerfile, welches die Funktionen strcpy usw. definiert. Die heisst aber in C++ cstring.
Also um jetzt mal alles richtige zusammenzusammeln und alles falsche zu kürzen, so muss es sein (Anmerkung: ohne using, mit std::, beides zusammen ist überflüssig und :: vor dem std erst recht
):#include <string> #include <iostream> struct options { std::string name; char *type; int defaultVal; char *help; char *verify; }; struct driverparam { char *name; options paramOptions; }; int main(){ driverparam b; b.paramOptions.defaultVal = 2; std::cout << b.paramOptions.defaultVal << endl; }
-
Wenn ich es mit
::std::string name;probiere kommt ein Fehler
parse error before `:'
Probiere ich es mit
std::string name;kommt der Fehler
parse error before `std'
Gebe ich den Namen der Include-Datei nur mit "<string>" an, kommt der Fehler, dass die Datei nicht gefunden wurde.
Ich arbeite unter einem QNX 6.3. Der Compiler ist ein GCC. Ich glaube in der Version 2.95.3
mfg chuqa
-
Hallo,
Also um jetzt mal alles richtige zusammenzusammeln und alles falsche zu kürzen, so muss es sein (Anmerkung: ohne using, mit std::, beides zusammen ist überflüssig und :: vor dem std erst recht )
Da hast du Recht, aber "meine Methode" geht auch.

Ja, einmal reicht, war nur dazugefuscht.

MFG winexec*
-
Gebe ich den Namen der Include-Datei nur mit "<string>" an, kommt der Fehler, dass die Datei nicht gefunden wurde.
Wenn er <string> nicht findet, kann es sein, das er keine C++ Standard Bibliothek unterstützt. Evtl. mußt du diese zus. deinem Compilerkit hinzufügen, damit du eine ISO-konforme C++ Compilerumgebung hast.
Die Fehler davor sind eine Folge davon, das <string> nicht gefunden wurde.
-
winexec* schrieb:
Hallo,
Also um jetzt mal alles richtige zusammenzusammeln und alles falsche zu kürzen, so muss es sein (Anmerkung: ohne using, mit std::, beides zusammen ist überflüssig und :: vor dem std erst recht )
Da hast du Recht, aber "meine Methode" geht auch.

Ja, aber zwei Tastenschläge zu viel und der Sourcecode wird durch zwei unnötige Doppelpunkte auch nicht besser lesbar. Klar, vieles geht, obs Sinn macht, ist eine andere Frage.
-
Naja also die <string.h> findet er ja. Das Gleiche passiert mit anderen Include-Dateien auch, so z.B. mit <stdio.h>. Nichtsdestotrotz kann er mit dem Datentyp "string" nichts anfangen.
mfg chuqa
-
Du willst aber nicht die <string.h>, sondern die <string>.
Wie wäre es mal mit einem Compiler-Update? Wenn du einen Compiler benutzt, der fast ein Jahrzehnt alt ist, mußt du dich nicht wundern, wenn mit Code im aktuellen Standard-C++ was schief geht.
-
Ist <string.h> und <string> das gleiche???
Nein! Hier interessiert es nicht ob er <string.h> findet, da es was anderes als <string> ist. Wir reden hier von Nullen und Einsen, und nicht von Gefühlen. 
-
g, okay, okay.
Ihr habt ja recht. Der Compiler findet auch <string> man muss halt nur bei der Dateiendung des Files, welches kompiliert werden soll, ein c mehr ranhängen (.cc anstatt *.c)*ditsch. Also ein richtig schöner dummer Fehler von mir.
Ich danke euch, für eure Hilfemfg chuqa