[LCP2] qt d3 pendu

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LCP2] qt d3 pendu

Message  Florent le Lun 25 Fév 2013, 21:16

Bonsoir,

J'ai un problème avec mes déclarations pour créé un jeu Pendu, en faisant des includes de pendu.h il me donne des erreurs de références indéfinies, si je fais une déclaration anticipée class Pendu; j'ai une erreur de type "error: forward declaration of 'struct"

Voici mes deux fichiers:

Code:

#ifndef JEUDUPENDU_H
#define JEUDUPENDU_H

#include <QtGui/QMainWindow>
#include "ui_jeudupendu.h"
class Pendu;
class QAction;


class JeuDuPendu : public QMainWindow
{
    Q_OBJECT
private slots:
   void nouvellePartie();
   void fermerPartie();
   void observateurProposition(bool);
   void observateurPotence(bool);
   void afficherAide();
public:
    JeuDuPendu(QWidget *parent = 0);
    void creerAction();
    ~JeuDuPendu();

private:
    QAction * qAction;
    Pendu * pendu;
    Ui::JeuDuPenduClass ui;
};

#endif // JEUDUPENDU_H

et le cpp

Code:

#include "jeudupendu.h"
#include "dialogueconfiguration.h"
#include <qmessagebox.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <string>

using namespace std;

JeuDuPendu::JeuDuPendu(QWidget *parent) :
      QMainWindow(parent) {
   ui.setupUi(this);
   ui.action_Fermer->setShortcut(QKeySequence(tr("Ctrl+F")));
   ui.action_Nouveau->setShortcut(QKeySequence(tr("Ctrl+N")));
   ui.action_Quitter->setShortcut(QKeySequence(tr("Ctrl+Q")));
   ui.action_Proposition->setShortcut(QKeySequence(tr("Ctrl+P")));
   ui.action_Potence->setShortcut(QKeySequence(tr("Ctrl+O")));

   char lettre = 'a';
   ui.cbChoixLettre->addItem(QString(QChar(lettre++)));
   for (int i = 0; i < 25; i++) {
      ui.cbChoixLettre->addItem(QString(QChar(lettre++)));
   }
   ui.centralwidget->hide();
   qAction = ui.menubar->addAction("A &Propos");
   creerAction();

}

void JeuDuPendu::creerAction() {
   connect(ui.action_Quitter, SIGNAL(triggered(bool)), qApp,SLOT(quit()));
   connect(ui.action_Nouveau, SIGNAL(triggered(bool)),this,SLOT(nouvellePartie()));
   connect(ui.action_Fermer, SIGNAL(triggered(bool)),this,SLOT(fermerPartie()));
   connect(ui.action_Proposition, SIGNAL(triggered(bool)),this,SLOT(observateurProposition()));
   connect(ui.action_Potence, SIGNAL(triggered(bool)),this,SLOT(observateurPotence()));
   connect(qAction, SIGNAL(triggered(bool)),this,SLOT(afficherAide()));
}

//ne s'affiche pas!!
void JeuDuPendu::afficherAide() {
   QMessageBox::information(const_cast<JeuDuPendu *>(this), "AIDE",
         "super jeu");
}

void JeuDuPendu::nouvellePartie() {
   DialogueConfiguration dialogueConfiguration(this);
   int retour = dialogueConfiguration.exec();
   if (retour == QDialog::Rejected)
      return;
   if (dialogueConfiguration.getNomFichier() != "") {
      vector<string> mots;
      string ligneLu;
      ifstream monFlux(
            dialogueConfiguration.getNomFichier().toStdString().c_str());
      if (monFlux) {
         getline(monFlux, ligneLu);
         mots.push_back(ligneLu);
      }
      try {
         pendu = new Pendu(mots, dialogueConfiguration.getVie());
      } catch (string & msg) {
         QMessageBox::critical(this, "Erreur de création de Partie",
               msg.c_str());
      }
   }
   ui.centralwidget->show();
   ui.action_Nouveau->setEnabled(false);
   ui.action_Fermer->setEnabled(true);
   ui.cbChoixLettre->currentIndex();
   ui.action_Potence->setCheckable(true);
   ui.action_Potence->setCheckable(true);
}
void JeuDuPendu::fermerPartie() {

}
void JeuDuPendu::observateurProposition(bool) {

}
void JeuDuPendu::observateurPotence(bool) {

}

JeuDuPendu::~JeuDuPendu() {

}

qui me donne comme erreur :

jeudupendu.cpp:63:58: erreur: invalid use of incomplete type 'struct Pendu'
jeudupendu.h:6:7: erreur: forward declaration of 'struct Pendu'
make[1]: *** [debug/jeudupendu.o] Error 1


Auriez-vous des conseils pour gérer les includes?

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  nvs le Lun 25 Fév 2013, 21:55

Florent a écrit:[...]

qui me donne comme erreur :

jeudupendu.cpp:63:58: erreur: invalid use of incomplete type 'struct Pendu'
jeudupendu.h:6:7: erreur: forward declaration of 'struct Pendu'
make[1]: *** [debug/jeudupendu.o] Error 1


Auriez-vous des conseils pour gérer les includes?
sans
Code:
#include "pendu.h"
#include <QAction>
dans le .cpp, ça ne va pas aller, en effet !






Idea

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  Florent le Mar 26 Fév 2013, 14:28

Merci de votre aide

Même en le rajoutant çà me sort une autre erreur:

Code:

C:\Users\MrX\workspace\JeuDuPendu/jeudupendu.cpp:65: référence indéfinie vers « DialogueConfiguration::getVie() »
make[1]: Leaving directory `/c/Users/MrX/workspace/JeuDuPendu'
C:\Users\MrX\workspace\JeuDuPendu/jeudupendu.cpp:65: référence indéfinie vers « Pendu::Pendu(std::vector<std::string, std::allocator<std::string> >, unsigned int) »

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  nvs le Mar 26 Fév 2013, 16:40

montre ton fichier .pro.




Arrow

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  Florent le Mar 26 Fév 2013, 18:45

Le voici :

Code:

TEMPLATE = app
TARGET = JeuDuPendu
QT += core \
    gui
HEADERS += ClasseMetier/O_SDO/observateur.h \
    ClasseMetier/moteur/pendu.h \
    dialogueconfiguration.h \
    jeudupendu.h
SOURCES += dialogueconfiguration.cpp \
    main.cpp \
    jeudupendu.cpp
FORMS += dialogueconfiguration.ui \
    jeudupendu.ui
RESOURCES +=

bounce

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  nvs le Mar 26 Fév 2013, 23:38

les classes métier n'apparaissent pas dans HEADERS et SOURCES, ça explique (probablement) le problème avec le constructeur de Pendu. il faut ajouter tous les fichiers correspondant au .pro. eclipse le gère bien lors d'une importation...

pour ce qui concerne DialogueConfiguration::getVie(), faudrait voir si (ou où) tu implémentes cette méthode...





Neutral

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  Florent le Mer 27 Fév 2013, 20:07

Mon header est présent, si j'ajoute le cpp c'est encore pire au niveau des erreurs!

Code:

ClasseMetier/moteur/pendu.cpp:48:9: attention : identifier 'nullptr' will become a keyword in C++0x [-Wc++0x-compat]
ClasseMetier/moteur/pendu.cpp: In function 'std::vector<std::basic_string<char> > lectureFichierPendu(const char*)':
ClasseMetier/moteur/pendu.cpp:16:14: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:16:33: erreur: in C++98 'fichier' must be initialized by constructor, not by '{...}'
ClasseMetier/moteur/pendu.cpp:19:16: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:19:37: erreur: in C++98 'msg' must be initialized by constructor, not by '{...}'
ClasseMetier/moteur/pendu.cpp: In constructor 'Pendu::Pendu(std::vector<std::basic_string<char> >, unsigned int)':
ClasseMetier/moteur/pendu.cpp:38:9: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:38:33: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:38:51: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:38:70: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:41:35: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:44:5: erreur: 'default_random_engine' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:44:27: erreur: expected ';' before 'dre'
ClasseMetier/moteur/pendu.cpp:45:17: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:48:9: erreur: 'dre' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:48:23: erreur: 'nullptr' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:51:5: erreur: 'uniform_int_distribution' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:51:30: erreur: expected primary-expression before 'unsigned'
ClasseMetier/moteur/pendu.cpp:51:30: erreur: expected ';' before 'unsigned'
ClasseMetier/moteur/pendu.cpp:53:28: erreur: 'dre' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:53:31: erreur: 'di' was not declared in this scope
ClasseMetier/moteur/pendu.cpp: In member function 'void Pendu::proposition(char)':
ClasseMetier/moteur/pendu.cpp:96:15: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:98:33: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:103:16: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:103:36: erreur: in C++98 'msg' must be initialized by constructor, not by '{...}'
ClasseMetier/moteur/pendu.cpp:114:10: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:115:10: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
make[1]: Leaving directory `/c/Users/MrX/workspace/JeuDuPendu'
ClasseMetier/moteur/pendu.cpp: In member function 'std::string Pendu::solution() const':
ClasseMetier/moteur/pendu.cpp:159:25: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
make[1]: *** [debug/pendu.o] Error 1
make: *** [debug] Error 2

Je l'ai donc retirer du pro et juste laisser pendu.h
J'ai implémente la méthode getVie() mais j'ai toujours l'erreur

Code:

C:\Users\MrX\workspace\JeuDuPendu/jeudupendu.cpp:65: référence indéfinie vers « Pendu::Pendu(std::vector<std::string, std::allocator<std::string> >, unsigned int) »
collect2: ld a retourné 1 code d'état d'exécution
make[1]: *** [debug/JeuDuPendu.exe] Error 1
make: *** [debug] Error 2

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  nvs le Mer 27 Fév 2013, 20:42

Florent a écrit:Mon header est présent, si j'ajoute le cpp c'est encore pire au niveau des erreurs!

Code:

ClasseMetier/moteur/pendu.cpp:48:9: attention : identifier 'nullptr' will become a keyword in C++0x [-Wc++0x-compat]
ClasseMetier/moteur/pendu.cpp: In function 'std::vector<std::basic_string<char> > lectureFichierPendu(const char*)':
ClasseMetier/moteur/pendu.cpp:16:14: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:16:33: erreur: in C++98 'fichier' must be initialized by constructor, not by '{...}'
ClasseMetier/moteur/pendu.cpp:19:16: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:19:37: erreur: in C++98 'msg' must be initialized by constructor, not by '{...}'
ClasseMetier/moteur/pendu.cpp: In constructor 'Pendu::Pendu(std::vector<std::basic_string<char> >, unsigned int)':
ClasseMetier/moteur/pendu.cpp:38:9: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:38:33: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:38:51: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:38:70: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:41:35: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:44:5: erreur: 'default_random_engine' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:44:27: erreur: expected ';' before 'dre'
ClasseMetier/moteur/pendu.cpp:45:17: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:48:9: erreur: 'dre' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:48:23: erreur: 'nullptr' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:51:5: erreur: 'uniform_int_distribution' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:51:30: erreur: expected primary-expression before 'unsigned'
ClasseMetier/moteur/pendu.cpp:51:30: erreur: expected ';' before 'unsigned'
ClasseMetier/moteur/pendu.cpp:53:28: erreur: 'dre' was not declared in this scope
ClasseMetier/moteur/pendu.cpp:53:31: erreur: 'di' was not declared in this scope
ClasseMetier/moteur/pendu.cpp: In member function 'void Pendu::proposition(char)':
ClasseMetier/moteur/pendu.cpp:96:15: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:98:33: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:103:16: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:103:36: erreur: in C++98 'msg' must be initialized by constructor, not by '{...}'
ClasseMetier/moteur/pendu.cpp:114:10: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
ClasseMetier/moteur/pendu.cpp:115:10: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
make[1]: Leaving directory `/c/Users/MrX/workspace/JeuDuPendu'
ClasseMetier/moteur/pendu.cpp: In member function 'std::string Pendu::solution() const':
ClasseMetier/moteur/pendu.cpp:159:25: attention : extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
make[1]: *** [debug/pendu.o] Error 1
make: *** [debug] Error 2
lis-tu les messages d'erreurs ? ceux-ci t'indiquent que tu compiles du code c++11 (anciennement c++0x) sans indiquer au compilateur de travailler avec ce standard. dans le td qt1, il est indiqué quoi faire dans le fichier .pro.

Florent a écrit:Je l'ai donc retirer du pro et juste laisser pendu.h
une chose est certaine : tant que le .cpp n'apparaitra pas dans le .pro, ça n'ira pas !

Florent a écrit:J'ai implémente la méthode getVie() mais j'ai toujours l'erreur

Code:

C:\Users\MrX\workspace\JeuDuPendu/jeudupendu.cpp:65: référence indéfinie vers « Pendu::Pendu(std::vector<std::string, std::allocator<std::string> >, unsigned int) »
collect2: ld a retourné 1 code d'état d'exécution
make[1]: *** [debug/JeuDuPendu.exe] Error 1
make: *** [debug] Error 2
résous d'abord les problèmes liés au c++11 et au .pro Smile






santa

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  Florent le Jeu 28 Fév 2013, 00:40

En effet! J'ai modifier mon .pro et problème résolu Wink

Code:

QMAKE_CXXFLAGS += -std=c++0x
TEMPLATE = app
TARGET = JeuDuPendu
QT += core \
    gui
HEADERS += ClasseMetier/O_SDO/observateur.h \
   ClasseMetier/O_SDO/sujetDObservation.h \
    ClasseMetier/moteur/pendu.h \
    dialogueconfiguration.h \
    jeudupendu.h
SOURCES += dialogueconfiguration.cpp \
   ClasseMetier/O_SDO/sujetDObservation.cpp \
   ClasseMetier/moteur/pendu.cpp \
    main.cpp \
    jeudupendu.cpp
FORMS += dialogueconfiguration.ui \
    jeudupendu.ui
RESOURCES +=

Merci de votre aide Smile

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  nvs le Jeu 28 Fév 2013, 00:51

tu m'en vois ravi !






Basketball

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2] qt d3 pendu

Message  Contenu sponsorisé Aujourd'hui à 05:24


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum