template-variable in einer methode



  • gelöst: ich wollte das template 2x deklarieren...
    habe es gelöst ich hatte das template schon deklariert dadurch musste ich nur noch die variable deklarieren. tut mir leid für das unnötige posten hier...

    Meine Lösung:

    #include <iostream>
    
    class bit {
    public:
     template<typename T>void binDisplay(T &dual);
     template<typename T>void hexDisplay(T &hex);
     template<typename T>void octDisplay(T &oct);
    };
    
    template<typename T>void bit::binDisplay(T &dual) { T t1; short size = sizeof(T)*8; for(int i = 0; i < size;i++) { std::cout << i << ":"; t1 = (dual >> (size-i)) & 0x01; std::cout << t1 << std::endl; } }
    


  • @Mechanics sagte in template-variable in einer methode:

    Lass das template<typename T> bei der Variablendeklaration weg und verwende T.

    danke... bin nach mehrmaligem ausprobieren draufgekommen, aber danke für die hilfe!!!!

    kann man die posts hier als gelöst selbst markieren?



  • wenn ich dem ganzen jetzt ein char zum testen gebe, kriege ich diese ausgabe hier:
    https://ibb.co/XzpfRdz



  • wenn ich dem ganzen jetzt statt einer template-variable ein bool gebe funktioniert es. hätte ich mir auch denken können...

    das nächste problem ist jetzt aber die formatierung stimmt nicht...
    https://ibb.co/tD1jmmt

    woran liegt das? ich kann das natürlich umformatieren wieder. mit einer bitverschiebung... mich würde aber interessieren woran liegt das?



  • 01100001 wäre ein 'a' bei mir wird 00110000 angezeigt... eine bitverschiebung um 1 löst das... aber warum tritt das überhaupt auf?



  • weil meine schleife bei 0 anfängt die bitverschiebung zu machen und eine verschiebung um 0 ist keine verschiebung... facepalm. ich reite mich hier immer weiter rein. lol



  • Es ist aber durchaus nicht schlecht, wie du selber weitergekommen bist. Die Frage zu formulieren ist oft schon die halbe Antwort.



  • danke :). jetzt kommt aber das nächste problem...
    ich habe folgende switch anweisung

     if(sizeof(var)*8 > iPos) { if(c == '+' || c == '-' || c == '~') {
    
      switch(c) {
       case '+': var |=  (0x01 << iPos);
       case '-': var &= ~(0x01 << iPos);
       case '~': var ^=  (0x01 << iPos);
      }
      
     return var; } }
     
     else { return var; }
    

    also in meiner variable ein bit setzen, löschen oder invertieren. nur reagiert mein programm beim bit löschen als ob ich ein bit setze...
    wo liegt mein fehler? sämtliche tutorials die ich anschaue sagen mir ich habe es richtig gemacht...



  • Da fehlen die breaks (edit: oder eben direkt jeweils ein return), so wird immer in den nächsten Zweig „durchgefallen“.



  • danke:) man so ein anfängerfehler... funktioniert jetzt perfekt.
    ich benutze nie switch-anweisungen, aber hier ist es der übersicht-halber doch ganz gut.

    danke nochmal. und mein programm ist fertig.


Anmelden zum Antworten