Hilfe bei get und set



  • 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