Liste von Objekten der eigenen Klasse als Attribut
-
Hallo,
ich möchte eine Klasse schreiben, die eine Liste (aus der STL) mit Objekten aus dieser Klasse als Attribut enthält. Dazu verwende ich folgenden Quelltext:
#ifndef __PERSON_H #define __PERSON_H #include <list> #include <string> using std::string; class Person { private: string name, firstname; int year; // year of birth list<Person> children; public: Person(); // weitere Methoden }; #endif /* __PERSON_H */
Wenn ich versuche, diesen Code zu kompilieren, erhalte ich die folgende Fehlermeldung:
error: 'list' is used as a type, but is not defined as a type.Kann mir jemand sagen, warum das so nicht geht? Vielen Dank,
Michael
-
schreibe std::list
mfg
-
1. __PERSON_H ist für dich verboten, es sei denn du bastelst an einem Compiler. PERSON_H reicht auch.
2. Du hast nur using std::string; ein using std::list oder std::list<Person> sind besser.
-
Ponto schrieb:
2. Du hast nur using std::string; ein using std::list oder std::list<Person> sind besser.
Danke, so funktioniert es.
Ponto schrieb:
1. __PERSON_H ist für dich verboten, es sei denn du bastelst an einem Compiler. PERSON_H reicht auch.
Hmm, das war in dem Tutorial, das ich verwende so vorgegeben, aber von mir aus ....
Gruß,
Michael
-
mren81 schrieb:
Ponto schrieb:
1. __PERSON_H ist für dich verboten, es sei denn du bastelst an einem Compiler. PERSON_H reicht auch.
Hmm, das war in dem Tutorial, das ich verwende so vorgegeben, aber von mir aus ....
Gruß,
MichaelDann ist dein Tutorial nicht mehr zeitgemäß und hat wahrscheinlich noch andere Schwächen. Ich würde mir ein anderes Tutorial oder ein gutes Buch suchen.
-
Und hier noch kurz warum:
Texte mit __ oder _ am Anfang ( und vll. auch Ende) sind dem Compiler vorbehalten.
So gibt es z.B.: __TIMESTAMP__, __FILE__ und __LINE__ oder vll. auch __FUNCTION__[ironie]
Und wenn du gaaanz viel Pech hast, dann ist bei deinem Compiler
__PERSON_H der Name desjenigen der <Phantasie bemühen> gemacht hat.
[/ironie]Außerdem müssten die neueren Compiler (ist ja eigentlich der Präprozessor) mit
#pragma once
klarkommen.
-
Standardcontainer dürfen eigentlich nicht mit unvollständigen Typen instantiiert werden.
http://www.cuj.com/documents/s=7986/cujcexp2002austern/