Eine Klasse verwenden, bevor sie definiert wird

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Eine Klasse verwenden, bevor sie definiert wird

Beitrag von naums » Fr Jan 20, 2012 10:11 pm

Hallihallöchen,

Ich will ein Objekt der Klasse ini_head in der Klasse ini_column verwenden. ini_head wird dabei im Code erst später definiert als die Klasse ini_column. Wie also kann ich ini_head in ini_column verwenden?

Code: Alles auswählen

#ifndef INI_PARSER
#define INI_PARSER

namespace ini
{
    class iniClass
    {
        private:            
            enum ParserState
            {
                NONE,
                HEADER,
                COLUMN,
                ERROR
            };
    
            long int getFilesize(char* filepath);
            
            void println(char* content, int counter);
            void println(char* column, int colcount, char* value, int valcount);
            char* copyString(char* content, int counter);
    
        public: 
            class ini_column
            {
                public:
                    char* name;
                    char* value;
                    ini_column* next;
                    ini_column* prev;
                    iniClass::ini_head* head;
                    
                    ini_column(char* n, char* v);
                    ini_column(char* n, char* v, ini_column* nextElement, ini_column* previous);
            };
            class ini_head
            {
                public:
                    char* head;
                    ini_head* next;
                    ini_head* prev;
                    iniClass::ini_column* column;
                    
                    ini_head(char* name);
                    ini_head(char* name, ini_head* nextElement, ini_head* previous, ini_column* col);
            };
        
            iniClass::ini_head* head;    
            
        iniClass(char* filepath);
        ~iniClass();
        
        bool ColumnExists(char* column);
        char* getValue(char* head, char* column);
        char* parseHead(char* content, int counter);
        void parseColumn(char* column, int columnCounter, char* value, int valueCounter, char* head);
        bool deleteAllHeads();
        bool deleteAllColumns(iniClass::ini_head* hd);
        iniClass::ini_head* getHead(char* head);
        iniClass::ini_head* getLastHead();
        iniClass::ini_column* getLastColumn(iniClass::ini_head* head);
    };
};

#endif
ich kriege diesen kompilierfehler:
ini_parser.h:31:21: error: 'ini_head' in class 'ini::iniClass' does not name a type
MfG Naums
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Eine Klasse verwenden, bevor sie definiert wird

Beitrag von Xin » Fr Jan 20, 2012 10:56 pm

Zum einen muss die Tatsache, dass ini_head eine Klasse ist vorher bekannt sein. Das geht ganz einfach mit einer Deklaration:

Code: Alles auswählen

class ini_had
Zum zweiten willst Du eine iniClass::ini_head haben. Du hast aber noch einen Namensraum: ini::iniClass::ini_head.
Schreib einfach ini_head und gut.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Eine Klasse verwenden, bevor sie definiert wird

Beitrag von naums » Fr Jan 20, 2012 11:07 pm

mit class ini_head klappt. So was einfaches ... und es funktioniert. Thx.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Eine Klasse verwenden, bevor sie definiert wird

Beitrag von Xin » Fr Jan 20, 2012 11:20 pm

Er versuchte den Namensraum iniClass ausgehend vom globalen Namensraum zu finden. Die gibt es aber nicht, weil iniClass ja im Namensraum ini liegt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Eine Klasse verwenden, bevor sie definiert wird

Beitrag von naums » Sa Jan 21, 2012 5:09 pm

mit iniClass klappts doch auch. Er konnte einfach ini_head nicht in iniClass finden, weil die erst später definiert wurde. Jedenfalls denke ich das, will mich da auch net mit dem Herrn Professor Diplominformatiker anlegen. ;)

MfG Naums
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Eine Klasse verwenden, bevor sie definiert wird

Beitrag von Xin » Sa Jan 21, 2012 5:25 pm

naums hat geschrieben:mit iniClass klappts doch auch. Er konnte einfach ini_head nicht in iniClass finden, weil die erst später definiert wurde. Jedenfalls denke ich das, will mich da auch net mit dem Herrn Professor Diplominformatiker anlegen. ;)
Würde derzeit auch noch nicht viel bringen. :-)

Er sucht zunächst im aktuellen Namensraum. Das ist iniClass. Dort findet er iniClass.
Sobald Du den ::-Operator benutzt, startet er seine Suche aus dem globalen Namensraum heraus, Du musst also einen absoluten Pfad verwenden, wenn sich der gesuchte Typ nicht im aktuellen Namensraum befindet.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten