2012-04-10 12 views
-3

ok, so ist mein Problem das. Ich muss eine benutzerdefinierte Liste kopieren und die Funktion muss ein privates Mitglied meiner List-Klasse sein. sieht so aus: atm:Mit einer Klasse innerhalb ihrer eigenen Erklärung

sieht aus wie scheiße ich weiß, aber ich wurde gesagt, es so zu tun. die Kompilierung-Fehler erhalten:

error: `List* List::copy(List*)' is private 

ist es eine Möglichkeit, um dieses Problem zu gehen, oder ich verstehe meine Richtungen falsch?

+1

Das ist bei weitem nicht genug Code. –

+0

hängt davon ab, wo Sie diese Funktion aufrufen. Diese 'copy'-Methode kann nur von einer anderen Methode dieser Klasse aufgerufen werden – fen

+0

Wenn es C++ ist, dann kann "struct List_Node *" einfach in "List_Node *" geändert werden. Sie haben jedoch nicht angegeben, wo der Fehler aufgetreten ist und wie Sie versucht haben, ihn zu verwenden. – Spook

Antwort

2

Sie müssen die Funktion innerhalb einer anderen Elementfunktion aufrufen, die public ist.

Sie können private Mitgliedsfunktionen nicht von außerhalb der Klasse aufrufen. Der Fehler deutet darauf hin, dass Sie das tun.

1

Wenn Sie die List::copy aus Element Funktionen von List aufrufen (wie der Titel angibt), sollten Sie kein Problem haben.

Wenn Sie es von außerhalb der Klasse aufgerufen werden soll, werden Sie keinen Zugriff auf die privaten Member-Funktionen erhalten (zB copy), wenn Sie erklären, die CLIP-Funktion ein friend der Klasse

0

Try Kopie-Konstruktor zu verwenden oder Operator = Überlastung.

0

Ich denke, Sie werden dazu aufgefordert, weil die Benutzer dieser Klasse die Liste nicht direkt kopieren sollen. Der Listenknoten wird auch als private Struktur deklariert, auf die keine externen Funktionen zugreifen können. Der Aufbau und die Zerstörung des Listenknotens sollte von Member-Methoden dieser Klasse gehandhabt werden.

Möglicherweise aus diesen Gründen sollte die Kopiermethode geschützt werden, in diesem Fall als privat deklariert.

Sie können die private Kopiermethode in allen Mitgliedsmethoden dieser Klasse aufrufen, einschließlich öffentlicher Methoden.

Obwohl dies unwahrscheinlich ist, können Sie einfach eine Methode public member deklarieren, die nur diese private Methode aufruft, die die private Methode für externe Funktionen verfügbar macht. Es wird jedoch nicht sinnvoll sein, die Kopiermethode an erster Stelle zu deklarieren.

Verwandte Themen