Hilfe bei get und set


  • Mod

    Ich sehe nirgendwo, was pos() oder x() sein sollen. Von der Fehlermeldung her würde ich aber mal vermuten, dass diese keine Referenz zurückgeben. Du benutzt sie aber so, als könnte man ihnen etwas zuweisen.

    edit: 15 Sekunden zu langsam... 😞



  • gegner hat ja auch gar keine funktion pos !?

    der code sieht aber so und so etwas chaotisch aus - wieso besitzt spiel einen pointer auf gegner?

    bb

    btw: Du hast Konstruktor und Destruktor verwechselt(zumindest bei den Kommentaren) ;o)



  • Was soll diese Zeile überhaupt?
    Was soll x da sein?

    Ich denke du willst eher das hier:

    g->pos().setx( rand() % 1 + 0 );
    


  • Stimmt,verwechslung rückgängig gemacht;)

    Aber auch Fehler von mir, dass die Fehlercodezeile falsch ist...
    Sie sieht eigendlich so aus:

    g->getx() = rand() % 1 + 0;  //Fehler!!!!!!
    

    Hoffe das hilft vllt weiter!!



  • Die Lösung hat drakon schon gepostet ;o)


  • Administrator

    unskilled schrieb:

    Die Lösung hat drakon schon gepostet ;o)

    Zumindest fast und die Antwort von SeppJ und mir trifft hier auch zu. Man kann einer temporären Variable nichts zuweisen.

    Grüssli



  • Vielen Dank....hat auch schon geklappt bei allen Klassen 🙂

    Nur bei einer noch nicht ganz...ich poste mal den Code...
    leider bringt er schon folgende Fehlermeldung bei der get-Methode...

    error: conversion from 'QObject*' to non-scalar type 'QObject' requested

    spiel.h

    class spiel : public QLabel {
       private:
           int xpos;
           int ypos;
           int richtung;
           int myTimerId;
           schiff * s;
           highscore * h;
           schuss * su;
           gegner *g;
           QObject * myApp;  //das hier!!
           int i;
           QString str;
    
       public:
          QObject getobject();
          spiel (QWidget * );  //Konstruktor
          ~spiel();  //Destruktor
          QVector<gegner *> vector_gegner;
          QVector<schuss_gegner *> vector_schuesse;
          void  keyPressEvent(QKeyEvent *event);
          void  showEvent(QShowEvent * event);
          void  timerEvent(QTimerEvent * event);
          void  hideEvent(QHideEvent * event );
          void  keyReleaseEvent( QKeyEvent *event);
    };
    

    spiel.cpp

    QObject spiel::getobject() {
        return myApp;
    }
    

    main.cpp

    ...
    s->myApp = (QObject *)&app;
    ...
    


  • QObject spiel::getobject() // <-- soll ein QObject zurückgeben
    {
        return myApp; // myApp ist ein QObject*
    }
    


  • Und bevor du in weitere Probleme reinrennst:
    QObject kann man nicht kopieren. Gib einen Pointer zurück, dann wird alles laufen.



  • Danke...Änderungen bei spiel.cpp und spiel.h bezgl. des Pointers wurden gemacht...
    Methode funzt...
    Nur leider bekomm ich es bei der main.cpp nicht hin...



  • Mr.Burns schrieb:

    Nur leider bekomm ich es bei der main.cpp nicht hin...

    Wenn du noch etwas konkreter wirst, können wir dir vielleicht sogar helfen. 😉



  • ok ich versuchs 🙂

    die aktuelle spiel.h

    class spiel : public QLabel {
       private:
           int xpos;
           int ypos;
           int richtung;
           int myTimerId;
           schiff * s;
           highscore * h;
           schuss * su;
           gegner *g;
           QObject * myApp;
           int i;
           QString str;
    
       public:
          QObject *getobject();
          spiel (QWidget * );  //Konstruktor
          ~spiel();  //Destruktor
          QVector<gegner *> vector_gegner;  //dynamisches Array gegner
          QVector<schuss_gegner *> vector_schuesse;  //dynamisches Array schuesse
          void  keyPressEvent(QKeyEvent *event);
          void  showEvent(QShowEvent * event);
          void  timerEvent(QTimerEvent * event);
          void  hideEvent(QHideEvent * event );
          void  keyReleaseEvent( QKeyEvent *event);
    };
    

    spiel.cpp

    QObject* spiel::getobject() {
        return myApp;
    }
    

    Der Fehler kommt bei der main.cpp:

    s->myApp = (QObject *)&app;
    

    error: 'QObject* spiel::myApp' is private

    Fehlermeldung ist klar...nur wie schreib ich es um in der main.cpp,dass es passt?

    Gruß



  • Für was denn das eigentlich?
    Es gibt
    😉 QApplication::instance()
    😉 qApp Macro
    um an das QApplication-Objekt zu gelangen. Warum also extra setzen?

    Zum Problem: Die Fehlermeldung sagt doch alles. Entweder machst du myApp public, oder du bietest eine Funktion "spiel::setMyApp(QObject* o)" an, um das Object zu setzen. Was du aber, wie bereits gesagt, gar nicht brauchst, wenn es dir nur um das QApplication geht.


  • Administrator

    @Mr.Burns,
    Wieso programmierst du im übrigen mit Qt, wenn du anscheinend noch nicht mal richtig C++ beherrschst? Wäre es nicht klüger, zuerst richtig C++ zu lernen?

    Grüssli



  • Danke mit der set-Methode hab ichs hinbekommen!!

    void spiel::setMyApp(QObject* o) {
         myApp = o;
    }
    

    und:

    s->setMyApp((QObject *)&app);
    

    Warum Qt? gezwungenermaßen 😉



  • Wozu der C-Cast?


Anmelden zum Antworten