ich bekomme nur Speicheradressen ausgegeben (anstatt der gespeicherten Werte), obwohl ich garnicht mit Pointern arbeite



  • ich arbeite mit einem vector<DiagRun>, den ich zwar "beschreiben" und "lesen" kann, jedoch bekommme ich nur Speicheadressen ausgegeben.

    warum bekomme ich nur die Speicheradressen?!?

    thx4help

    #include <vector>
    #include <string>
    #include <iostream>
    struct DiagRun
    {
           DiagRun(Koord startpos, int sc, int lae){ //Constructor
               int score= sc;
               int laenge = lae;
               Koord start = startpos;                     
           }
    
           int score;
           int laenge;
           Koord start;              
    };
    
    struct Koord {  
          Koord(){
                 int m,n;
                 } 
        Koord(int x, int y){
            m= x;
            n= y;
        }
    
        int m,n;
    };
    
    int main(){
    
        Koord temp (3,4); 
        Koord start1 (5,7); 
    
        vector<DiagRun> testvector;
        DiagRun temp2(start1, 15, 12); 
        testvector.push_back(temp2);
    
        cout << testvector.at(0).start.m; 
            //hier sollte 5 ausgegeben werden (start1.m)
            //es wird eine 7-stellige Zahl ausgegeben (vermutlich eine Adresse?!?)
    }
    


  • Dein Compiler sollte aber erstmals einiges zu meckern haben bevor er das kompiliert.

    Wieso hast du in den Konstruktoren die Variablen nochmal neu definiert:

    DiagRun(Koord startpos, int sc, int lae){ //Constructor
               int score = sc;
               int laenge = lae;
               Koord start = startpos;                    
           }
    ...
    Koord(){
                 int m,n;
                 }
    

    Sie sind ja schon Elemente der Klasse und wenn du sie nochmal in den Konstruktoren neu definierst und ihn dann was zuweist, dann werden nur den lokalen Variablen was zugewiesen die anderen Elementvariablen werden nicht beachtet, da sie von den lokalen überdeckt werden.

    Behebe diesen und paar andere kleine Fehler und es sollte Funktionieren 👍



  • sorry,

    ich habe copy&Paste gemacht und danch nicht mehr gecheckt, ob es funktioniert! jetzt wird es zwar kompeliert, doch wird immer noch nicht das richtige ergebnis ausgegeben. Anstatt der korrekten Ausgabe 5 kommt jetzt ne null!!

    #include <string>
    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    struct Koord { 
            int m;
            int n;
          Koord(){
                 int m,n;
                 } 
    
        Koord(int x, int y){
            m= x;
            n= y;
        }
    
        bool Koord::lt(const Koord& k) const;
    
         void init (){
              m=0;
              n=0;
         }
    
    };
    
    struct DiagRun
    {
           DiagRun(Koord startpos, int sc, int lae){ //Constructor
               int score= sc;
               int laenge = lae;
               Koord start = startpos;                     
           }
    
           int score;
           int laenge;
           Koord start;              
    };
    
    int main(){    
    
        vector<DiagRun> testvector;
        Koord temp (3,4);
        Koord start1 (5,7);
        DiagRun temp2(start1, 15, 12);
        testvector.push_back(temp2);
    
        cout << testvector[0].start.m;
            //hier sollte 5 ausgegeben werden (start1.m)
            //es wird nun eine 0 ausgegeben (vorher wars ne Speicheradresse...)
    }
    


  • @Freak-Coder: das war der Fehler. Ich habe deine Nachricht erst nach meinem zweiten Post gelesen. Dnake für eure Mühe bei meinem "Scheißcode"

    PS: ich wusste nicht, dass man beim Constructor die Variablen nicht neu deklarieren muss!!

    THX



  • Was soll das?

    Koord(){
                 int m,n;
                 }
    

    Was bringt das?

    DiagRun(Koord startpos, int sc, int lae){ //Constructor
               int score= sc;
               int laenge = lae;
               Koord start = startpos;                    
           }
    

    ???

    mach das erste mal ganz weg und ändere das Zweite in

    DiagRun(Koord startpos, int sc, int lae)
    {
               score= sc;
               laenge = lae;
               start = startpos;                    
    }
    


  • K.A. schrieb:

    struct Koord { 
            int m;
            int n;
          Koord(){
                 int m,n;
                 } 
               
        Koord(int x, int y){
            m= x;
            n= y;
        }
    

    und bei Konstruktoren immer schön Initialisierungslisten verwenden. Dann passieren solche Fehler erst gar nicht.

    struct Koord { 
        int m;
        int n;
    
        Koord()
            : m( 0 )
            , n( 0 ) 
        {}
    
        Koord(int x, int y)
            : m( x )
            , n( y ) 
        {}
    

    K.A. schrieb:

    bool Koord::lt(const Koord& k) const;
    

    ich unterstelle mal, dass 'lt' "less than" heißen soll. Dann mach doch gleich

    bool Koord::operator<(const Koord& k) const;
    

    wobei man 'Koord::' innerhalb der Klassen-Definition i.a. wegläßt.

    K.A. schrieb:

    void init (){
              m=0;
              n=0;
         }
    

    solche init-Methoden sind immer ein Hinweis auf ein Fehl-Design. Vorschlag: weglassen

    Gruß
    Werner



  • Muss man wegen

    DiagRun(Koord startpos, int sc, int lae)
    

    nicht den = Operator implementieren?



  • moe szyslak schrieb:

    Muss man wegen

    DiagRun(Koord startpos, int sc, int lae)
    

    nicht den = Operator implementieren?

    Man muss nie aufgrund der Konstruktor-Signatur einen Zuweisungsoperator implementieren.


Anmelden zum Antworten