Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Undefined reference error



  • Hi,
    I have this setItemDelegateForColumn line:

     QSqlTableModel* fixModel = new QSqlTableModel(this);
      fixModel->setTable ("Items");
      fixModel->setEditStrategy (QSqlTableModel::OnRowChange);
      fixModel->setSort (2, Qt::DescendingOrder);
    
      fixModel->select ();
    
      ui->tableView_Fix->setModel (fixModel);
    
      ui->tableView_Fix->setItemDelegateForColumn (4, new MaterialDelegate(this));
      ui->tableView_Fix->setItemDelegateForColumn(2, new FixViewDelegate(this));
      ui->tableView_Fix->setItemDelegateForColumn (3, new WhatFixViewDelegate(this));
    
    

    Since I added MaterialDelegate I get this error:
    undefined reference to `MaterialDelegate::MaterialDelegate(QObject)'*
    I read it might be a bug, but how can I go around it and assign the delegate?


  • Lifetime Qt Champion

    @gabor53 said in Undefined reference error:

    MaterialDelegate::MaterialDelegate(QObject)'

    It says it dont have such constructor.

    Show the class definition.



  • @mrjj
    materialdelegate.h:

    #ifndef MATERIALDELEGATE_H
    #define MATERIALDELEGATE_H
    
    #include <QComboBox>
    #include <QObject>
    #include <QString>
    #include <QSqlQuery>
    #include <QStyledItemDelegate>
    #include <QVBoxLayout>
    #include <QWidget>
    
    class MaterialDelegate : public QStyledItemDelegate {
      Q_OBJECT
    
     public:
      QSqlDatabase db;
    
      explicit MaterialDelegate(QObject* parent = Q_NULLPTR);
    
      QWidget*   createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
      void setEditorData(QWidget* editor, const QModelIndex& index) const;
      void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const;
      void setModelData(QWidget* editor, QAbstractItemModel* fixModel, const QModelIndex& index) const;
    
    
     signals:
    
     public slots:
    };
    
    #endif // MATERIALDELEGATE_H
    
    

  • Lifetime Qt Champion

    Hi
    seems fine.
    Delete all files in your build folder and run qmake and rebuild all.



  • @mrjj
    Same error.



  • Hi @gabor53

    this is probably derived from a QObject * and you assume implicit conversion. But the explicit keyword in the MaterialDelegatecontructor does not allow for it: http://en.cppreference.com/w/cpp/language/explicit

    -Michael.


  • Lifetime Qt Champion

    Hi,

    Might be a silly question but did you implement that constructor ?

    On a side note, there's not need for that db member variable.



  • @SGaist
    Hi,
    Yes, implemented it.



  • I completely deleted and recreated materialdelegate and now it work. Still don't know what was wrong with the previous file.


Log in to reply