Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt]pb de constructeur

Sujet résolu
    14 juin 2008 à 19:19:23

    bonjour
    ma fonction constructeur ne passe pas le compilateur qui me renvoie le message suivant :
    DmxDisplay.cpp: In constructor ‘DmxDisplay::DmxDisplay(QWidget*, TableauDmx*)’:
    DmxDisplay.cpp:6: erreur: expected identifier before ‘{’ token
    DmxDisplay.cpp:6: erreur: expected `(' before ‘{’ token
    make: *** [DmxDisplay.o] Erreur 1


    pourtant, je lui envoie bien les bon types en paramètres (&app,*TableauDmx)

    voici le .h
    #ifndef DMXDISPLAY_H_INCLUDED
    #define DMXDISPLAY_H_INCLUDED
    
    #include <QtGui>
    #include "TableauDmx.h"
    #include "ui_dmxdisplay.h"
    
    
    class DmxDisplay : public QWidget, private Ui::DmxDisplay
    {
        Q_OBJECT
    
    public:
        DmxDisplay(QWidget *parent, TableauDmx *observe);
    
    
    public slots :
        void updateDmx(int[]);
        void setNbCol(int nbCol);
    
    private:
        int m_nbRow;
        int m_nbCol;
    
        TableauDmx *m_outDmx;
    
    };
    
    
    
    #endif // TABLEAU_DMX_H_INCLUDED
    

    et le .cpp, je ne met que la fonction constructeur
    #include <iostream>
    #include "DmxDisplay.h"
    
    
    DmxDisplay::DmxDisplay(QWidget *parent,TableauDmx *observe) : QWidget(parent),
    {
        setupUi(this);
    // créeation du lien vers le tableau observé
        m_outDmx = observe;
        std::cout<<"instance de TableauDmx créee"<<std::endl;
    
        m_outDmx->getValue(5);
        std::cout<<"setSize "<< m_outDmx->getSizeTableau()<<std::endl;
    m_nbCol=4;
        std::cout<<"nb de colonnes "<<m_nbCol<<std::endl;
    
        dmxTable->setColumnCount(m_nbCol);
    //le nombre de lignes dépend de la taille du tableau et du nombre de colonnes
    // calcul du nombre de lignes
        m_nbRow=((m_outDmx->getSizeTableau()/m_nbCol)*2)+2;
    //lignes
        dmxTable->setRowCount(m_nbRow);
        std::cout<<"dimentions du display ok"<<std::endl;
    
    
    // remplissage du tableau
    // canaux
        int i=1;
        for (i=1;i<=m_outDmx->getSizeTableau();i++)
        {
            //calcul de la position du widgetItem
            int colIndex= ((i-1)%m_nbCol);
            int rowIndex=(((i-1)/m_nbCol)*2);
    
            // création du TablewidgetItem
            QTableWidgetItem *item=new QTableWidgetItem;
    
            //setup du QWidgetItem
            QString label= "0";
            label.setNum(i);
            item->setText(label);
    
            // affectation de l'item a la QTable
            dmxTable->setItem(rowIndex,colIndex,item);
            std::cout<<"item label "<<i<<" ajouté"<<std::endl;
    
        }
        std::cout<<"sortie de boucle"<<std::endl;
    // valeurs
        int j=0;
        for (j=0;j<m_outDmx->getSizeTableau();j++)
        {
            //calcul de la position du widgetItem
            int colIndex= (j)%m_nbCol;
            int rowIndex=(((j)/m_nbCol)*2)+1;
            std::cout<<"colonne "<<colIndex<<"ligne "<<rowIndex<<std::endl;
            // création du TablewidgetItem
            QTableWidgetItem *item=new QTableWidgetItem;
            std::cout<<"QTableWidgetItem crée"<<std::endl;
    
            //setup du QWidgetItem
            QString label= "0";
            std::cout<<"QString ajouté"<<std::endl;
            label.setNum(m_outDmx->getValue(j));
            std::cout<<"QString label "<<j<<" ajouté"<<std::endl;
            item->setText(label);
            std::cout<<" label "<<j<<" ajouté"<<std::endl;
            // affectation de l'item a la QTable
            dmxTable->setItem(rowIndex,colIndex,item);
            std::cout<<"value label "<<j<<" ajouté"<<std::endl;
        }
    
    }
    


    je ne comprends pas ce qui cloche avec cette fonction
    ca doit etre tout con mais il y'a un truc que je n'ai pas du piger :)
    merci de votre aide
    :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      14 juin 2008 à 19:22:39

      DmxDisplay::DmxDisplay(QWidget *parent,TableauDmx *observe) : QWidget(parent),
      

      enlev la virgule a la fin de la liste d'initialisation:
      DmxDisplay::DmxDisplay(QWidget *parent,TableauDmx *observe) : QWidget(parent)
      
      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2008 à 19:37:31

        yes merci beaucoup !
        trop rapide (faut dire que mon erreur était bete aussi !)

        mais ca plante plus loin quand j'apelle la fonction

        main.cpp: In function ‘int main(int, char**)’:
        main.cpp:15: erreur: no matching function for call to ‘DmxDisplay::DmxDisplay(QApplication*, TableauDmx*&)’
        DmxDisplay.h:14: note: candidats sont: DmxDisplay::DmxDisplay(QWidget*, TableauDmx*)
        DmxDisplay.h:10: note:                 DmxDisplay::DmxDisplay(const DmxDisplay&)
        make: *** [main.o] Erreur 1


        le main.cpp (les autres n'ont pas changé a part la virgule bien sur )
        #include <QApplication>
        #include <QtGui>
        
        #include "DmxDisplay.h"
        
        int main(int argc, char *argv[])
        {
            QApplication app(argc, argv);
        
            //création du tableau dmx
            TableauDmx *the_dmx = new TableauDmx;
        
        //TableauDmx test;
            //création du display
            DmxDisplay fenetre(&app,the_dmx);
            // affichage du display
            fenetre.show();
        
            return app.exec();
        }
        


        the_dmx est bien du type TableauDmx *, pourquoi il comprends que je lui envoie un TableauDmx*& ?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          14 juin 2008 à 20:46:49

          Le constructeur dois etre:
          DmxDisplay(TableauDmx *observe, QWidget *parent=0);
          

          et app n'est pas a envoyer au constructeur:
          • ce n'est aps un QWidget
          • ta fenetre est la fenetre principale, elle n'as pas de fenetre parente

          Edit:
          et dans le main tu fais
          DmxDisplay fenetre(the_dmx);
          


          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2008 à 21:01:28

            merci youyou ca marche nickel
            • Partager sur Facebook
            • Partager sur Twitter

            [Qt]pb de constructeur

            × 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