friend function im template



  • Hallo,

    ich habe zwei templates:

    template <class X> class node{
    public:	        friend void add(X* obj);
    private:	node(X* content);
    		X* content;
    };
    
    template<class X>class vector{
    public:		void add(X* obj);	
    private:	node<X>*first;
    
    };
    

    Ich möchte, dass nur innerhalb der Funktion add(X* obj) von vector ein neues objekt der klasse node erstellt werden kann.
    Deshalb hab ich den Konstruktor von node private gesetzt.
    Wenn ich jedoch kompiliere, kommt folgender Fehler:

    ..\main.cpp:22: instantiated from here
    ..\node.h:42: error: `node<X>::node(X*, int) [with X = Autos]' is private
    ..\vector.h:56: error: within this context

    Ich dachte, innnerhlab der friendfunction kann ich auf alle privaten attribute zugreifen?



  • Du hast kein friend auf vector::add definiert sondern auf eine Funktion add im globalen Namensraum.

    Für Deine Vektor Klasse ist Node immer noch private.



  • muss dann die friendzeile folgendermaßen aussehen:

    friend void vector<X>::add(X* obj);
    

    dann bekomme ich aber folgenden fehler

    ..\node.h:15: error: variable or field vector' declared void ..\\node.h:15: error:vector' is neither function nor member function; cannot be declared friend
    ..\node.h:15: error: expected `;' before '<' token

    Das Template node kennt ja mein Template vector nicht...
    Also hab ich gedacht, ich schreib noch folgendes in die node.h datei:
    #include "vector.h"
    Hat leider auch nicht geholfen. :S
    was mache ich falsch?



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten