IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Erreurs de compilation multiples


Sujet :

Qt

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Par défaut Erreurs de compilation multiples
    Bonsoir,

    En cette heure tardive, vous me voyez un peu abattu. Car après avoir passé mon après midi à corriger des erreurs, en voici deux qui restent de marbres devant toutes mes tentatives ...

    Je fais depuis quelques semaines un pong en c++ avec Qt. Mais véritablement aujourd'hui, je marque un gros coup d'arrêt ...
    J'ai des erreurs qui reviennent de façons répétées et j'en ai presque envie de pleurer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .\QTPong\terrain.cpp:8: error: expected primary-expression before '*' token
     
    ..\QTPong\terrain.cpp:12: error: expected primary-expression before '*' token
     
    ..\QTPong\terrain.cpp:13: error: expected primary-expression before '*' token
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    \QTPong\terrain.cpp:22: error: no matching function for call to 'Terrain::connect(QTimer**, const char*, const char*)'
     
    c:\Qt\2010.05\qt\include/QtCore/../../src/corelib/kernel/qobject.h:198: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
     
    c:\Qt\2010.05\qt\include/QtCore/../../src/corelib/kernel/qobject.h:313: note:                 bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
    Et enfin ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    \QTPong\terrain.cpp: In member function 'virtual void Terrain::drawForeground(QPainter*, const QRectF&)':
     
    ..\QTPong\terrain.cpp:73: error: request for member 'isActive' in '((Terrain*)this)->Terrain::timer', which is of non-class type 'QTimer*'
     
     
    c:\Qt\2010.05\qt\include/QtCore/../../src/corelib/kernel/qobject.h:313: note:                 bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const

    Elles reviennent plusieurs fois sur des fonctions différentes. Je pense qu'il y'a des erreurs de c++ tout "simplement" ... Mais fatigue, énervement et yeux rouges me font demander un peu d'aide.
    Il manque des choses encore alors ne vous étonnez pas si le jeux ne marche pas même avec la résolution de ces erreurs, mais ça devrait être un immense pas en avant ...

    Je vous ai uploader le projet sous QT ici : http://dl.free.fr/fg33bJamN

    Si quelqu'un aurait la gentillesse de m'expliquer là où je bute, mon dimanche en serait ensoleillé par ce temps de pluie battante !..

    Cordialement.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour killus et bienvenue sur le forum

    Il y a beaucoup d'erreur de syntaxe dans ton code, il vaut revoir les bases du C++.

    Dans terrain.cp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Terrain::Terrain(QObject *parent = 0) : QGraphicsScene(parent), ball(new Balle(QGraphicsItem *parent = 0))
    {
        ...    
        players[Player] = new raquetteJoueur(QGraphicsItem *parent = 0);
        players[Ai] = new raquetteJoueur(QGraphicsItem *parent = 0);
    Regade les liste d'initialisation et les paramètres par défaut.

    Le code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Terrain::Terrain(QObject *parent) : QGraphicsScene(parent), ball(new Balle(parent))
    {
        ...   
        players[Player] = new raquetteJoueur(parent);
        players[Ai] = new raquetteJoueur(parent);
    De plus Balle et raquetteJoueur ne prennent pas un QObject comme parent mais un QGraphicsItem.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(&timer, SIGNAL(timeout()), SLOT(advance()));
    connect prend un pointeur en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(timer, SIGNAL(timeout()), SLOT(advance()));
    timer est un pointeur donc il faut écrire :
    au lieu de :
    Bon courage

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 2
    Par défaut
    Merci de ton aide.

    Désolé que tu ais du éditer mon message pour mettre les erreurs en code, je ne savais pas si c'étais nécessaire.

    Je pense que je touche au but. J'ai intégré les modifications et fait mon slot pour appeler une nouvelle partie dans l'écran d'accueil.

    Le code compile !!! ... Mais il me retourne une erreur lorsque j'appui sur mon bouton pour jouer.

    D'après ce que je vois c'est l'erreur code -1073741819 et après des recherches sur le net, ça serait des erreurs venant de pointeurs... Je comprend pas pourquoi ça ne met pas d'erreur à la compilation alors ??
    Nouvelle matinée à faire plusieurs tests ainsi qu'une bonne partie de l'après midi sans résultats...

    J'ai posé la version mise à jour du projet : http://dl.free.fr/gEEyjy6Kc

    Encore désolé, je sais que mon code a certainement beaucoup d'erreurs de syntaxes et/ou pas bien codé mais il faut bien les faire pour apprendre.

    Merci déjà pour l'aide apportée !

  4. #4
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Bonjour,

    D'après ce que je vois c'est l'erreur code -1073741819 et après des recherches sur le net, ça serait des erreurs venant de pointeurs... Je comprend pas pourquoi ça ne met pas d'erreur à la compilation alors ??
    A première vue, vos erreurs semblent provenir d'un problème de durée de vie de variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Accueil::jouer(){
     
            QGraphicsView w;
     
            // ...
     
                w.setScene(jouer);
                w.show();
            // On ferme la fenêtre d'accueil lorsqu'on lance le jeu
            this->hide();
    } // Ici, la durée de vie de w prend fin
    Dans ce genre de cas, la solution la plus simple est de passer par un pointeur comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Accueil::jouer() {
     
            QGraphicsView *w = new QGraphicsView;
            w->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            w->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            w->setMinimumSize(800, 600);
            // On créé la nouvelle fenêtre
            Terrain *jouer = new Terrain(0) ;
            w->setScene(jouer);
            w->show();
            // On ferme la fenêtre d'accueil lorsqu'on lance le jeu
            hide();
    }
    Sauf qu'avec cela, l'application continue de crasher.
    Après avoir encadré la ligne Terrain *jouer = new Terrain(0) de deux qDebug(), je peux déduire que le crash survient lors de l'initialisation de ce pointeur.

    Je me balade donc dans terrain.cpp et je vois que le pointeur timer n'est pas initialiser lorsque le constructeur appelle la fonction reset(), car le programme crashe sur la ligne "timer->stop();".

    Conclusion : vous devez initialiser votre pointeur timer dans le constructeur de la classe Terrain avant d'appeler la fonction reset().

    EDIT : voici le nouveau constructeur (avec "Votre intervalle de temps" à remplacer par une valeur en ms) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            Terrain::Terrain(QGraphicsItem *parent) : QGraphicsScene(0), ball(new Balle(parent))
            {
                    setSceneRect(-400, -300, 800, 600);
     
                    players[Player] = new raquetteJoueur(parent);
                    players[Ai] = new raquetteJoueur(parent);
     
     
                    addItem(ball);
                    addItem(players[Player]);
                    addItem(players[Ai]);
     
                    timer = new QTimer();
                    timer->setInterval(Votre intervalle de temps);
     
                    reset();
     
                    timer->start();
     
                    connect(ball, SIGNAL(pointFor(int)), SLOT(asignPoint(int)));
                    connect(timer, SIGNAL(timeout()), SLOT(advance()));
                    connect(timer, SIGNAL(timeout()), SLOT(updateAi()));
                    connect(timer, SIGNAL(timeout()), SLOT(updatePlayer()));
            }
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

Discussions similaires

  1. Réponses: 19
    Dernier message: 30/10/2017, 10h02
  2. Erreur de compilation "multiple definition of"
    Par cereal dans le forum Débuter
    Réponses: 3
    Dernier message: 22/02/2010, 17h29
  3. Erreur de compilation de type "multiple markers at this line"!
    Par mobi_bil dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 01/03/2009, 20h21
  4. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo