Problem beim Zugriff auf eine Methode einer Klasse

hihachi

Grünschnabel
Hallo liebes Forum,

Ich habe ein Problem beim Zugriff auf eine Methode einer Klasse.

Verwendeter Compiler: Borland Builder 6.0

Das Headerfile sieht wie folgt aus:
Code:
class G
{
        private:
                class KN
                {
                        public:
                                KN(int wert):next(NULL),inhalt(wert){}
                                KN * next;
                                int inhalt;
                };
                KN * first;
                int n;
        public:
                G();
                ~G();
                G(const G & obj);

                KN * anfang();
                KN * ende()
                {
                        KN * p = anfang();
                        while(p->next != NULL)
                        {
                                p = p->next;
                        }
                        return p;
                };  // inline Implementation funktioniert
                KN * vorEnde()
                {
                        KN * p = anfang();
                        while(p->next != ende())
                        {
                                p = p->next;
                        }
                        return p;
                };
...
Das ganze stellt die Deklaration einer Einfach verketteten Liste mit Kopf, für den Typ "int" dar.
Problem ist folgendes wenn ich die Methode
Code:
 KN * anfang(){...};
inline implementiere, funktioniert dies ohne Probleme.
Ich möchte diese Methode aber in einer seperaten CPP implmentieren.
Da sie eine Methode der Klasse G ist sollte dies mit:
Code:
KN * G::anfang()
{
...
};
funktionieren. Oder liege ich da falsch
Bei anderen Rückgabetypen (int, void, etc) funktioniert dies ja auch.

Danke für eure Hilfe, ich hoffe ich hab mein Problem vernünftig schildern können. :D

Gruß,

hihachi
 
Hallo hihachi,

der Unterschied zwischen inline und nicht-inline (oder wie man das nennt) ist hier, das KN ja eine innerhalb von G deklarierte Klasse ist.
Inline - d.h. in der Klassendeklaration von G - ist der Kontext für KN damit klar.

Nicht inline wird dagegen erwartet - selbst wenn eine Methode der Klasse G implementiert wird - dass KN eine öffentliche Klasse ist. Und hier kommt noch hinzu, dass Du KN im private-Bereich deklarierst. Bin nicht sicher, wofür das dient.

Lösung: Am einfachsten Du deklarierst KN nicht innerhalb von G, Du mußt den Grund für diese Konstruktion einfach mal überprüfen. Wenn ich mich aus meinen alten C++-Tagen noch recht entsinne, kannst Du aber auch mit G::KN den Datentyp des Rückgabewerts definieren (bin aber nicht ganz sicher).

Gruß
Oliver
 
Hallo,

also ich hab mich glaube in meinem ersten Post falsch ausgedrückt.
Es ist eine Einfach Verkettete Liste bestehend aus Objekten der Klasse KN.
Sorry für meine Falschangabe.
Warum dieses Konstrukt? Weil unser Prof des so möchte :D
Er will halt eine übergeordnete Klasse (hier G)welche die Liste darstellt und die einzelnen Elemente sind wiederum Objekte einer Klasse (hier KN).
Dein Vorschlag war jetzt:
Code:
G::KN* G::anfang(){...};
oder:
Code:
G::KN* anfang(){...};

werde beides testen und berichten.

EDIT

folgende implementierung funktioniert:
Code:
G::KN * G::anfang(){...};
danke für die schnelle Hilfe. :D

/EDIT


Gruß,
hihachi
 
Zuletzt bearbeitet:
Zurück