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ß,
    Michael

    Dann 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/


Anmelden zum Antworten