private Methode benutzt private Methode



  • Tachyon schrieb:

    82kolu schrieb:

    7xCore schrieb:

    Tachyon schrieb:

    Es liegt wie gesagt daran, dass Objekte einer Klasse A nicht auf private Member von Objekten einer Klasse B zugreifen können.

    Sieht so aus als ob er das nicht verstanden hätte.
    http://de.wikibooks.org/wiki/C++-Programmierung:_Klassen

    also wnen ich es richtig verstanden hab, soll ich aus Matrix3<T> Matrix<T,3,3> machen, richtig?
    weil das hab ich gemacht und es ist immernoch falsch

    Wenn Du aus einer Matrix<T,4,5> auf eine Matrix<T,3,3> zugreifst, dann geht es immer noch nicht, weil es immernoch unterschiedliche Klassen sind. Du kannst aus einem Matrix<T,4,5> -Objekt nur auf private Member von anderen Matrix<T,4,5> -Objekten zugreifen, aber nicht auf private Member von z.B. Matrix<T,3,3> -Objekten. Sobald sein Templateparameter unterschiedlich ist, hast Du auch unterschiedliche Templateklassen.

    ich hab schon abfragen gemacht das es nur eine 3x3 matrix sein kann die da aufgerufen wird. es kann also gar nie eine 4x5 Matrix aufgerufen werden.



  • Dann zeig mal Code her. Am besten welcher, der auch compilierbar ist.



  • close



  • Und das hast du so in der Klasse stehen?

    Edit: übrigens schon wieder cpp-tags vergessen...

    Versuch mal ohne die

    template<...>
    

    vor den Funktionen - angenommen, ich versteh das Konzept

    Und angenommmen, du hast folgendes vor deiner Klasse stehen:

    template<typename T, unsigned int rows, unsigned int cols> 
    class Matrix
    {
    //...
    };
    


  • Also es lag daran das ich Matrix<T,3,3> gesagt hab und das nicht mehr algemeingehalten ist... und deshalb sieht er es irgendwie als neue methode... hab jetzt alles umgestellt und ist jetzt public... aber ich habs mit virtuel bisschen versteckt...

    Naja danke 🙂
    bin so zufrieden.



  • wie close ich den thread?



  • 82kolu schrieb:

    Also es lag daran das ich Matrix<T,3,3> gesagt hab und das nicht mehr algemeingehalten ist... und deshalb sieht er es irgendwie als neue methode... hab jetzt alles umgestellt und ist jetzt public... aber ich habs mit virtuel bisschen versteckt...

    Naja danke 🙂
    bin so zufrieden.

    Der letzte Teil (also Deine Lösung) klingt nicht sehr überzeugend. Der erste Teil ist das, worauf ich versucht habe, Dich hinzuweisen.


  • Mod

    template<int I> class foo {};
    class bar {};
    

    Dann sind foo<1> und foo<2> voneinander so verschieden, wie foo<1> und bar voneinander verschieden sind. foo ist keine Klasse für sich, sondern die Vorlage (=Template) wie man eine Klasse bauen kann. Erst so etwas wie foo<1> ist eine richtige Klasse. Und diese ist eine ganz andere als zum Beispiel foo<2> und kennt daher auch nicht die privaten Elemente von foo<2> , genausowenig wie sie auf die privaten Elemente von bar zugreifen könnte.


  • Mod

    82kolu schrieb:

    wie close ich den thread?

    Gar nicht. Wieso solltest du? Warum sollte man nicht mehr zu deinem Thema schreiben dürfen, bloß weil es für dich erledigt ist? Zumal es für dich offensichtlich nicht erledigt sein sollte, weil du die Lösung wohl nicht wirklich kapiert hast und bloß frustriert aufgegeben hast.



  • Wieso sollte ich unzufrieden sein?
    Es macht ja jetzt genau das was es machen soll und ist sogar noch strukturierter... das einzige was ich bissle doof finde das ich die methoden nicht wirklich private machen konnte. aber ich hab sie ja "indirekt" versteckt.

    mein baum ist einfach bisschen falsch... das ist das problem weil ich von einer übergeordneten klasse auf eine untergeordnete zugreife.



  • Du benutzt Ableitungen in der linearen Algebra?


  • Mod

    Von Templates abgeleitete Klassen können auch untereinander befreundet sein. Guckst du hier:
    http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/topic/com.ibm.xlcpp8a.doc/language/ref/friends_and_templates.htm

    Immer noch der Meinung, der Thread sollte geschlossen sein und du hättest diesen Tipp lieber nicht bekommen?


Anmelden zum Antworten