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!


Anmelden zum Antworten