friend und template



  • hola leute

    folgendes problem
    hab eine template class der ich eine template-funktion als friend eintrichtern will.
    aber ich mach da scheinbar irgendwie was falsch.
    folgender code:

    template <class K, class T>
    class DataTable
    {
       friend void AssignTableToVec(std::vector<T> &vec, const DataTable<K, T> &d);
       ...
       private:
          std::map<K, T> my_map;
    };
    
    template<class K, class T>
    void AssignTableToVec(std::vector<T> &vec, const DataTable<K, T> &d)
    {
       ...
       if(d.my_map.size() == 0)    // (1)
       ...
    }
    

    in zeile (1) meckert dann der comiler, das er auf my_map net zugreifen kann.
    aufgerufen wirds folgendermassen:

    abe::AssignTableToVec<int, abe::ArtikelData>(artikel_db, Tag == FORM_ID_ZIPPO_ARTIKEL ?
            abe::databases::instance().zippo_db : abe::databases::instance().firma_db);
    

    sieht da einer den fehler ?

    Meep Meep



  • Wo kommt das Objekt table her, und warum nimmst du nicht d?

    grüße





  • re

    @David_pb
    muss naetuerlich d und nicht table heissen. hab da wohl beim tippen grad nix gedacht. im source stimmts aber schon.

    @phlox81
    mit ner vorwaertsdeklaration meckert er genau so.

    scheinbar liegt der fehler wo anders.

    Meep Meep



  • Vergleich doch mal den Beispielcode, den phlox verlinkt hat, mit deinem Quellcode 😉

    Die spitzen Klammern nach Funktionsnamen sind dabei nötig, um die Funktion als Template-Funktion kenntlich zu machen. In die spitzen Klammern hätte man noch T schreiben können, um anzudeuten, daß es sich um die Instantiierung für T handeln soll, was aber bereits aus dem zweiten Argument klar wird.



  • CStoll schrieb:

    Vergleich doch mal den Beispielcode, den phlox verlinkt hat, mit deinem Quellcode 😉

    Die spitzen Klammern nach Funktionsnamen sind dabei nötig, um die Funktion als Template-Funktion kenntlich zu machen. In die spitzen Klammern hätte man noch T schreiben können, um anzudeuten, daß es sich um die Instantiierung für T handeln soll, was aber bereits aus dem zweiten Argument klar wird.

    jups das wars. danke. kommt davon wenn man nur jede 3te zeile liest ;o)

    Meep Meep


Anmelden zum Antworten