Klassen ableiten - Namespace wird nicht gefunden

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

Klassen ableiten - Namespace wird nicht gefunden

Beitrag von naums » So Okt 14, 2012 12:38 pm

Ahoi,

Ich habe wieder mit dem G++ zu kämpfen. Diesmal folgender Code (Auschnitte):

draw-list.h:

Code: Alles auswählen

[..]
#include "draw-basics.h"

namespace list
{
[..]

    class object3d : basics::object3d
    {
        public:
            object3d* next;
            object3d* prev;
    };
}
[..]
draw-basics.h:

Code: Alles auswählen

[..]
#include "draw-list.h"

namespace basics
{

[..]

    class object3d
    {
        private: 
            OBJECT_TYPE type; 
            list::POINT_LIST<list::point3d>* pointlist;
        public: 
            object3d(OBJECT_TYPE t, list::POINT_LIST<list::point3d> pl);
    };
}
[..]
Fehler:
draw-list.h:63: error: 'basics' has not been declared
draw-list.h:63: error: expected '{' before 'object3d'
draw-list.h:64: error: invalid type in declaration before '{' token
draw-list.h:64: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
draw-list.h:65: error: expected primary-expression before 'public'
draw-list.h:65: error: expected '}' before 'public'
draw-list.h:65: error: expected ',' or ';' before 'public'
draw-list.h:67: error: expected constructor, destructor, or type conversion before '*' token
Warum findet der den Namespace "basics" nicht? Ich will die Klassen ableiten - ist das erstmal so richtig?

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

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Klassen ableiten - Namespace wird nicht gefunden

Beitrag von Kerli » So Okt 14, 2012 12:42 pm

Was mir auf den ersten Blick einmal sehr suspekt ist, ist das siche beide Dateien gegenseitig einbinden...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Klassen ableiten - Namespace wird nicht gefunden

Beitrag von naums » So Okt 14, 2012 12:50 pm

draw-basics.h braucht die POINT_LIST - Klasse, die in draw-list.h definiert wird, draw-list.h braucht die object2d und object3d-Klassen, die in draw-basics.h definiert werden.

in beiden Dateien steht sowas: (am Bsp. draw-list.h)

Code: Alles auswählen

#ifndef draw_list
#define draw_list

[..]

#endif
Wenn die sich unendlich lange gegenseitig einbinden würden, kämen ja andre Compilerfehler.

MfG
.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: Klassen ableiten - Namespace wird nicht gefunden

Beitrag von Xin » So Okt 14, 2012 12:56 pm

Kerli hat geschrieben:Was mir auf den ersten Blick einmal sehr suspekt ist, ist das siche beide Dateien gegenseitig einbinden...
Womit sich auch die Fehler erklären.

@naums: Versuch die Abhängigkeiten zu lösen.
Dabei kann Dir hier aber auch keiner helfen, weil keiner weiß, wie die Abhängigkeiten aussehen: Die Dateien sind ja nicht vollständig.
naums hat geschrieben:draw-basics.h braucht die POINT_LIST - Klasse, die in draw-list.h definiert wird, draw-list.h braucht die object2d und object3d-Klassen, die in draw-basics.h definiert werden.
Dann definiere object2d/object3d woanders.
naums hat geschrieben: in beiden Dateien steht sowas: (am Bsp. draw-list.h)

Code: Alles auswählen

#ifndef draw_list
#define draw_list

[..]

#endif
Wenn die sich unendlich lange gegenseitig einbinden würden, kämen ja andre Compilerfehler.
Wenn drawlist sein define setzt und danach basics einbindet und basics sein define setzt und danach drawlist einbindet, dann wird drawlist nicht ein zweites Mal geladen und es geht mit basics weiter. Drawlist hat bis jetzt aber noch nichts definiert... also auch nichts, was bei basic jetzt benötigt würde. => Fehler: undefinerte Klasse...

Solange du nur Zeiger und Referenzen auf eine Klasse benötigst, reicht eine deklaration:

Code: Alles auswählen

namespace basics {
class object3d;
}

namespace list {
...
}
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