Problem mit Friend einer Klasse
-
Grüße Community,
ich sitze schon den ganzen Vormittag an einem Problem und komme nicht vorran.
Erstmal der Code:#include <iomanip> #include <string> #include <vector> #include <iostream> using namespace std; class StackElement { StackElement *pNext; // Nächstes Element StackElement *pPrevious; // Vorheriges Element string text; public: StackElement() { pNext = pPrevious = NULL; text = ""; } StackElement(string t) { pNext = pPrevious = NULL; text = t; } ~StackElement() {cout << "Delete: " << text << endl; } friend class Stack; friend ostream& operator<<(ostream&, Stack&); }; class Stack { StackElement *pBottom; //Zeiger auf Anker StackElement *pTop; //Zeiger auf oberstes Element public: Stack() { pBottom = new StackElement(">> Anker <<"); pTop = pBottom; } ~Stack(); string get(); void add(string); void remove(); bool isEmpty(); friend ostream& operator<<(ostream&, Stack&); }; ostream& operator<<(ostream& aus, Stack& myStack) { //Überladen von "<<" StackElement *pMerker; pMerker=myStack.pBottom; //pBottom sichern while(pMerker->pNext!=NULL) { pMerker=pMerker->pNext; aus << setw(7) << "Stack: " << setw(7) << setiosflags(ios::left) << pMerker->text << resetiosflags(ios::left) << endl; } return aus; } ...
Beim Compilieren bekomme ich, trotzdem ich ja die Operatorüberladungsfunktion in beiden Klassen als "Friend" angegeben habe folgende Fehlermeldung:
D:\HAW\OP\p32_1\p32_1.cpp(68) : error C2248: 'pBottom' : cannot access private member declared in class 'Stack' D:\HAW\OP\p32_1\p32_1.cpp(21) : see declaration of 'pBottom' D:\HAW\OP\p32_1\p32_1.cpp(70) : error C2248: 'pNext' : cannot access private member declared in class 'StackElement' D:\HAW\OP\p32_1\p32_1.cpp(8) : see declaration of 'pNext' D:\HAW\OP\p32_1\p32_1.cpp(71) : error C2248: 'pNext' : cannot access private member declared in class 'StackElement' D:\HAW\OP\p32_1\p32_1.cpp(8) : see declaration of 'pNext' D:\HAW\OP\p32_1\p32_1.cpp(74) : error C2248: 'text' : cannot access private member declared in class 'StackElement' D:\HAW\OP\p32_1\p32_1.cpp(10) : see declaration of 'text'
Irgendjemand ne idee?
-
Also bei mir compiliert er das ohne Probleme.
Visual Studio 2003
-
Oh, danke
Das beruhigt mich doch ein wenig.
Dann liegts wohl an meinem (alten?) Visual Studio 6.0 ?Gibt es da vielleicht irgend einen "Trick", das ganze lauffähig zu bekommen?
Grüße, Sieben7
-
Lass mal die using-Deklaration weg und schreib statt dessen überall explizit std::.
-
Vielen Dank!
Sieben7 -> Und weg vom Rechner, ab in die Sonne!