Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de nom de class

je comprend pas

    1 juin 2008 à 21:28:52

    Bonsoir,
    voilà j'ai cette erreur :
    In file included from menu/tab_mainMenu.h:37,
                     from main.cpp:25:
    menu/page_divers.h:47: error: ISO C++ forbids declaration of `DTabResistance' wi
    th no type
    menu/page_divers.h:47: error: expected `;' before '*' token
    mingw32-make[1]: *** [release/main.o] Error 1
    mingw32-make[1]: Leaving directory `D:/programmations/'
    mingw32-make: *** [release] Error 2


    mais ce n'est pas normale car :

    d_tab_resistance.h
    #ifndef H_TAB_RESISTANCE_H
    #define H_TAB_RESISTANCE_H
    
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QDialog>
    #include <QTabWidget>
    #include <QLabel>
    
    #include "../index.h" // toutes les definitions, ...
    #include "resistanceRho_L_S.h"
    
    class DTabResistance : public QDialog {
    
    	public :
    	     DTabResistance(QWidget *parent=0);
    		~DTabResistance();
    	
    	private :
    	    QTabWidget *d_tab_resistance ;
    		QVBoxLayout *tab_VLayout;
    		QLabel *label_titre;
    };
    
    #endif
    

    d_tab_resistance .cpp
    #include "d_tab_resistance.h"
    
    DTabResistance::DTabResistance(QWidget *parent) : QDialog(parent, Qt::Window)
    {
    	setWindowTitle(QString(NOM_VERSION)+ QString("Résistivité d'un conducteur électrique"));
    
    	label_titre = new QLabel("<h2 align=\"center\">Résistivité d'un conducteur électrique</h2>");
    	
    	d_tab_resistance = new QTabWidget;
    	d_tab_resistance->addTab(new ResistanceRho_L_S(), QString("R = ")+QChar(RHO)+QString("x (L : S)") );
    	
    	tab_VLayout = new QVBoxLayout;
    	tab_VLayout->addWidget(label_titre);
        tab_VLayout->addWidget(d_tab_resistance);
    
    	setLayout(tab_VLayout);
    }
    
    DTabResistance::~DTabResistance()
    {
        delete tab_resistance;
    	delete tab_VLayout;
    	delete label_titre;
    }
    

    page_divers.h
    #ifndef H_DIVERS_PAGE_H
    #define H_DIVERS_PAGE_H
    
    #include <QWidget>
    #include <QPushButton>
    #include <QGridLayout>
    #include <QLabel>
    #include <QFont>
    #include <QString>
    
    #include "categories/divers/d_resistivite/d_tab_resistance.h"
    
    #include "../index.h" // toutes les definitions, ...
    #include "../mybutton/myButton.h"
    
    class PageDivers : public QWidget {
    
    	Q_OBJECT
    
    	public:
    		PageDivers(QWidget *parent=0);
    		~PageDivers();
    
    	private slots:
        	void d_showResistivite();
    
    	private:
    		QLabel *label_titre_divers;
    		QPushButton *pageDivers_resistivite;
    		QGridLayout *pageDivers_gridLayout, *B_pageDivers_gridLayout;
    		
    		DTabResistance *d_r_resistivite;
    
    };
    
    #endif
    

    page_divers.cpp
    #include "page_divers.h"
    
    PageDivers::PageDivers(QWidget *parent) :  QWidget(parent), d_r_resistivite()
    {
    	label_titre_divers = new QLabel("<h2 align=\"center\">Calculs divers</h2>");
    	
    	d_r_resistivite = new DTabResistance;
    	
    	pageDivers_resistivite = new QPushButton("Résistivité");
    	connect(pageDivers_resistivite, SIGNAL(clicked()), this, SLOT( d_showResistivite() )); 
    	
    	B_pageDivers_gridLayout = new QGridLayout;
    	B_pageDivers_gridLayout->addWidget(pageDivers_resistivite, 0, 0, Qt::AlignCenter);
    	
    	pageDivers_gridLayout = new QGridLayout;
    	pageDivers_gridLayout->addWidget(label_titre_divers, 0, 0, Qt::AlignCenter);
    	pageDivers_gridLayout->addLayout(B_pageDivers_gridLayout, 1, 0, Qt::AlignCenter);
    	
    	setLayout(pageDivers_gridLayout);
    }
    
    PageDivers::~PageDivers()
    {
    	delete label_titre_divers;
    	delete d_r_resistivite;
    	delete pageDivers_resistivite;
    	delete B_pageDivers_gridLayout;
    	delete pageDivers_gridLayout;
    }
    
    void PageDivers::d_showResistivite()
    {
    	d_r_resistivite->show();
    	d_r_resistivite->setStyleSheet(lireCSS(5)); // fond dégradé
    }
    



    Pouvez-vous m'aider?
    ça dois surment être quelque chose de bête.
    MErci
    • Partager sur Facebook
    • Partager sur Twitter
    :)
      1 juin 2008 à 21:34:28

      Effectivement tu as une erreur toute bête :

      tes pointeurs doivent être initialisés a NULL, et non a 0 !
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        1 juin 2008 à 22:12:17

        gymnopaul >> Nawak. En C++ c'est équivalent bien qu'il puisse y avoir des subtilitées. Plus d'info: cf les forums de developpez.com

        Sinon, l'erreur sent le ; oublié à la fin de la déclaration d'une classe. Pour confirmer, fait voir les autres fichier inclut avant .
        • Partager sur Facebook
        • Partager sur Twitter
          2 juin 2008 à 18:43:24

          Ce n'est pas çaDavid je viens de tout vérifier.
          • Partager sur Facebook
          • Partager sur Twitter
          :)
            2 juin 2008 à 18:56:44

            Est ce que tu pourrais aussi afficher les fichiers "main.cpp" et "menu/tab_mainMenu.h" parce que si on regarde les lignes ca convient pas(la ligne 47 n'existe pas) peut-etre que le compilateur a compté les lignes du fichier qui inclus.
            • Partager sur Facebook
            • Partager sur Twitter
              2 juin 2008 à 19:11:30

              main.cpp

              #include "index.h"
              
              #include "XQSplashScreen/XQSplashScreen.h"
              
              #include <QApplication>
              #include <QMessageBox>
              #include <QMainWindow>
              
              #include "menu/tab_mainMenu.h"
              
              int main(int argc, char **argv)
              {
              	QApplication app(argc, argv);
              	
              	QPixmap pixmap(IMG_DEMARRAGE);
                  XQSplashScreen splash(pixmap, 3000);
                  splash.show();
                  splash.showMessage("Chargement du logiciel en cours ...", Qt::AlignBottom, Qt::white);
              
                  Tab_MainMenu *menu = new Tab_MainMenu;
              	menu->setStyleSheet(lireCSS(5)); // dégradé fond
              	menu->show();
              	
              	splash.delayedFinish(menu);
              	
              	return app.exec();
              }
              


              tab_mainMenu.h


              class Tab_MainMenu : public QMainWindow
              {
              	Q_OBJECT
              	
              	public:
              		Tab_MainMenu(QWidget *parent=0);
              		~Tab_MainMenu();
              		
              	private slots:
              		void aPropos();
              
              	private:
              	    QTabWidget *tab_mainMenu;
              		QGridLayout *gridLayout;
              		QLabel *label_titre_menu;
              		QWidget *principal;
              		QMenu *fichierMenu, *aideMenu;
              
              		void setupFichierMenu();
              		void setupAideMenu();
              };
              
              #endif
              


              tab_mainMenu.cpp
              #include "tab_mainMenu.h"
              
              Tab_MainMenu::Tab_MainMenu(QWidget *parent) :  QMainWindow()
              {
              	setWindowTitle(QString(NOM_VERSION)+QString("Menu"));
              	setFixedSize(LARGEUR_FENETRE_MIN, HAUTEUR_FENETRE_MIN);
              	
              	principal = new QWidget;
              
              	setupFichierMenu();
              	setupAideMenu();
              	
              	tab_mainMenu = new QTabWidget;	
              	tab_mainMenu->addTab(new PageContinu, tr("Continu"));
              	tab_mainMenu->addTab(new PageAlternatif, tr("Alternatif"));
              	tab_mainMenu->addTab(new PageDivers, tr("Divers"));
              	
              	gridLayout = new QGridLayout(principal);
              	gridLayout->addWidget(tab_mainMenu, 0, 0);
              	principal->setLayout(gridLayout);
              	
              	setCentralWidget(principal);
              
              }
              
              void Tab_MainMenu::aPropos()
              {
                 QMessageBox::about(this, QString("- A propos de " NOM_VERSION),
                  QString("<b>Le logiciel est soumis à la license GNU GPL pour le consulter cliquez sur le lien ci-après.</b>                                                                                                    \
              			<br /><a href=\"http://www.gnu.org/licenses/gpl.html\" >http://www.gnu.org/licenses/gpl.html</a><br /><br />"));
              }
              
              void Tab_MainMenu::setupFichierMenu()
              {
                  fichierMenu = new QMenu(tr("&Fichier"), this);
                  menuBar()->addMenu(fichierMenu);
              
              	fichierMenu->addSeparator();
              
                  fichierMenu->addAction(tr("&Quiter"), qApp, SLOT(closeAllWindows()),
                                      QKeySequence(tr("Ctrl+Q","Fichier | Quiter")));
              	menuBar()->setStyleSheet(lireCSS(7)); 
              }
               
              void Tab_MainMenu::setupAideMenu()
              {
              	aideMenu = new QMenu(tr("&?"), this);
                  menuBar()->addMenu(aideMenu);
              
                  aideMenu->addAction(tr("&A propos"), this, SLOT(aPropos()));
                  aideMenu->addAction(tr("&A propos de Qt"), qApp, SLOT(aboutQt()));
              	
              	menuBar()->setStyleSheet(lireCSS(7)); 
              
              }
              
              Tab_MainMenu::~Tab_MainMenu()
              {
              	delete tab_mainMenu;
              	delete gridLayout;
              	delete label_titre_menu;
              	delete principal;
              	delete fichierMenu;
              	delete aideMenu;
              }
              



              voilà
              • Partager sur Facebook
              • Partager sur Twitter
              :)
              Anonyme
                2 juin 2008 à 19:30:28

                Est ce que au final d_tab_resistance.h est bien inclue dans page_divers.h via par exemple index.h ?
                Car là, le compilo râle car il ne connait pas ce type.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 juin 2008 à 19:52:12

                  Citation : moii


                  page_divers.h

                  #ifndef H_DIVERS_PAGE_H
                  #define H_DIVERS_PAGE_H
                  
                  #include <QWidget>
                  #include <QPushButton>
                  #include <QGridLayout>
                  #include <QLabel>
                  #include <QFont>
                  #include <QString>
                  
                  #include "categories/divers/d_resistivite/d_tab_resistance.h"
                  
                  #include "../index.h" // toutes les definitions, ...
                  #include "../mybutton/myButton.h"
                  
                  class PageDivers : public QWidget {
                  
                  	Q_OBJECT
                  
                  	public:
                  		PageDivers(QWidget *parent=0);
                  		~PageDivers();
                  
                  	private slots:
                      	void d_showResistivite();
                  
                  	private:
                  		QLabel *label_titre_divers;
                  		QPushButton *pageDivers_resistivite;
                  		QGridLayout *pageDivers_gridLayout, *B_pageDivers_gridLayout;
                  		
                  		DTabResistance *d_r_resistivite;
                  
                  };
                  
                  #endif
                  


                  page_divers.cpp

                  #include "page_divers.h"
                  
                  PageDivers::PageDivers(QWidget *parent) :  QWidget(parent), d_r_resistivite()
                  {
                  	label_titre_divers = new QLabel("<h2 align=\"center\">Calculs divers</h2>");
                  	
                  	d_r_resistivite = new DTabResistance;
                  	
                  	pageDivers_resistivite = new QPushButton("Résistivité");
                  	connect(pageDivers_resistivite, SIGNAL(clicked()), this, SLOT( d_showResistivite() )); 
                  	
                  	B_pageDivers_gridLayout = new QGridLayout;
                  	B_pageDivers_gridLayout->addWidget(pageDivers_resistivite, 0, 0, Qt::AlignCenter);
                  	
                  	pageDivers_gridLayout = new QGridLayout;
                  	pageDivers_gridLayout->addWidget(label_titre_divers, 0, 0, Qt::AlignCenter);
                  	pageDivers_gridLayout->addLayout(B_pageDivers_gridLayout, 1, 0, Qt::AlignCenter);
                  	
                  	setLayout(pageDivers_gridLayout);
                  }
                  
                  PageDivers::~PageDivers()
                  {
                  	delete label_titre_divers;
                  	delete d_r_resistivite;
                  	delete pageDivers_resistivite;
                  	delete B_pageDivers_gridLayout;
                  	delete pageDivers_gridLayout;
                  }
                  
                  void PageDivers::d_showResistivite()
                  {
                  	d_r_resistivite->show();
                  	d_r_resistivite->setStyleSheet(lireCSS(5)); // fond dégradé
                  }
                  


                  • Partager sur Facebook
                  • Partager sur Twitter
                  :)
                    2 juin 2008 à 20:22:47

                    Citation : Davidbrcz

                    gymnopaul >> Nawak. En C++ c'est équivalent bien qu'il puisse y avoir des subtilitées. Plus d'info: cf les forums de developpez.com


                    Je n'ai pas très bien compris ta réponse :-° .

                    @moii : Peut-être faut-il changer l'ordre des includes...
                    Sinon tes fichiers sont tous inclus au projet ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juin 2008 à 20:24:27

                      J'utilise qt prompt et dans le *.pro je suis allé voir si les fichiers y étais avant de poster et c'étais le cas.
                      En fait c'est pour ça que je ne comprend pas à vrai dire.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      :)
                      Anonyme
                        2 juin 2008 à 20:42:54

                        gymnopaul >> En C++ utiliser NULL pour initialiser ses pointeurs , c'est la même chose qu'utiliser 0, bien que Bjarne Stroustrup recommande 0 (source http://www.research.att.com/~bs/bs_faq2.html).

                        Pour les subtilités, regarde ca:
                        #include <iostream>
                        #include <cstdlib>
                        
                        void foo(int*)
                        {
                        std::cout<<"PTR"<<std::endl;
                        }
                        
                        void foo(int)
                        {
                        std::cout<<"INT"<<std::endl;
                        }
                        
                        int main()
                        {
                        foo(NULL);
                        return 0;
                        }
                        

                        C'est la 2eme version qui va être appelée.

                        Pour plus d'info: les newsgroup : http://bytes.com/forum/thread504052.html
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          2 juin 2008 à 21:01:20

                          Tout simplement, note
                          class DTabResistance;
                          
                          un peu avant la déclaration de la classe. Pas de problème si tu utilises un pointeur.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 juin 2008 à 21:07:08

                            @Davidbrcz : Ok ok, je ne le savais pas (voilà j'ai appris un truc aujourd'hui :D !) .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 juin 2008 à 21:20:44

                              Citation : k1000

                              Tout simplement, note

                              class DTabResistance;
                              

                              un peu avant la déclaration de la classe. Pas de problème si tu utilises un pointeur.



                              Bon je ne comprend pas l'effet qu'a de rajouter class DTabResistance;
                              je croayt que c'étais pratiquement égale au fait d'inclure le fichier où étais la class, non?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              :)
                              Anonyme
                                2 juin 2008 à 22:13:20

                                class DTabResistance; est une déclaration anticipée.
                                Ca sert juste à dire à ton compilo qu'il va croiser ce type et qu'il ne faut pas qu'il râle comme quoi il ne connait pas encore la classe alors quelle st déjà utilisé comme type. Mais ce genre de chose ne devrais pas t'être utile puisque tu inclue bien la déclaration entière de ta classe avant utilisation.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 juin 2008 à 13:45:12

                                  apparement si puis ce que depuis que j'ai ajouté ça plus d'erreur.
                                  Or le header est bien mis en include au début du fichier.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  :)

                                  problème de nom de class

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown