Template als Freund Klasse in einer Klasse



  • Hi,

    ich habe folgendes Problem:
    Ich will in einer Template Klasse eine private Funktion einer normalen
    Klasse aufrufen. Dazu müßte ich eigentlich in der normalen Klasse
    die Template Klasse als Freund Klasse angeben.

    Der folgende Code funktioniert aber nicht (Compiler MSVC 6):

    template <class T> class Test
    {
    public:
    void getNr()
    {
    m_t.DoIt(); // Error : kein zugriff auf private funktion
    }

    private:
    T m_t;
    };

    class Number
    {
    template<class T> friend class Test; // ok? - funktioniert aber nicht

    private:
    void DoIt()
    {
    int i = 100;
    ++i;
    }
    };

    void main()
    {
    Test<Number> t;
    t.getNr();
    }

    cu
    Markus



  • und wieder einer, der zum mingw studio wechselt. 🙂



  • Um volkards Aussage noch ein bisschen zu unterstützen: Nimm einfach das MinGW Developer Studio, das kann das. (Sieht genauso aus und fühlt sich genauso an wie VC++ 6, hat aber einen besseren Compiler und ist Freeware. 🙂 )



  • Und ein unkomfortableren Debugger (vielleicht bin ich auch nur zu doof ihn zu bedienen 🙂 )... ansonsten ein Top-Programm.



  • @Markus2000
    Nimm den aktuellen MS Compiler, dann funktionierts auch. Version 6 ist einfach zu alt. Übrigens, das nächste mal bitte Code-Tags verwenden, sonst ist der Code einfach unleserlich.



  • groovemaster2002 schrieb:

    @Markus2000
    Nimm den aktuellen MS Compiler, dann funktionierts auch.

    Hmm...
    Option 1: Visual Studio.NET 2003, Kostenpunkt: 1.199 Euro (bzw. 99 Euro für die Schulversion
    Option 2: MinGW Developer Studio, völlig gratis, auch für den kommerziellen Einsatz



  • template<class T> friend class Test<T>;
    kenn ich, aber das das geht ... ich brauch Dev-C++.



  • 2 fragen zum thema:
    1. sind tempaltes in zusammenhang mit friends standardkonform?
    2. könnte theoretisch auch sowas gehen?(auch wenn ich das nie machen würde:)

    template<class T>
    class openForALL{
        friend T;
    };
    




  • nman schrieb:

    Hmm...
    Option 1: Visual Studio.NET 2003, Kostenpunkt: 1.199 Euro (bzw. 99 Euro für die Schulversion
    Option 2: MinGW Developer Studio, völlig gratis, auch für den kommerziellen Einsatz

    Hmm...
    Option 1: Visual C++ Toolkit 2003, Kostenpunkt: 0,00 Euro (bzw. 0 Euro für Schüler)
    Option 2: Visual C++ 2005 Express Edition Beta, völlig gratis
    Option 3: natürlich verbietet dir niemand andere Compiler bzw. IDE's zu benutzen 😉

    btw: neuere MS Compiler lassen sich auch in ältere Visual IDE's integrieren



  • groovemaster2002 schrieb:

    btw: neuere MS Compiler lassen sich auch in ältere Visual IDE's integrieren

    Die haben aber kein Tabbing, was Usabilitiy-mäßig ein echter Nachteil ist.

    Ich würde von allen aufgelisteten Optionen vermutlich noch am ehesten Visual C++ 2005 Express Edition Beta verwenden, wenngleich man damit nicht profilen kann, was auch eher unpraktisch ist.



  • nman schrieb:

    Ich würde von allen aufgelisteten Optionen vermutlich noch am ehesten Visual C++ 2005 Express Edition Beta verwenden, wenngleich man damit nicht profilen kann, was auch eher unpraktisch ist.

    Das mit dem Profilen kann ich nicht bestätigen, da ich's bisher noch nicht probiert hab. Ganz so problematisch sehe ich das allerdings nicht, da es für die Entwicklung relativ irrelevant ist, und in erster Linie zum Optimieren verwendet wird.


Anmelden zum Antworten