2017-01-15 8 views
0

からQAbstractItemModelオブジェクトを作成し、私はこのエラーを取得しています:コンストラクタ

/home/niko/QT_snippets/oop2/bus.cpp:3: error: no matching function for call to ‘Person::Person(Bus*, int)’ 
Bus::Bus(QObject *parent) : QObject(parent) , person1(this,100), person2(this,200) 
                       ^
/home/niko/QT_snippets/oop2/bus.h:5: In file included from ../oop2/bus.h:5:0, 
/home/niko/QT_snippets/oop2/bus.cpp:1: from ../oop2/bus.cpp:1: 
/home/niko/QT_snippets/oop2/person.h:11: candidate: Person::Person(QAbstractItemModel*, int) 
    explicit Person(QAbstractItemModel *parent = 0, int shoe_color=0); 
      ^
/home/niko/QT_snippets/oop2/person.h:11: note: no known conversion for argument 1 from ‘Bus*’ to ‘QAbstractItemModel*’ 

をそして、私の質問は、私はメンバーがQAbstractModelItemクラスであるオブジェクトを初期化しないか、でしょうか? (私はそれを削除するとき、私は子供たちがに削除されるようにしたいのでperson1person2の親はBusでなければなりません。)私は(QObject*)にキャストしようとしましたが、私は別のコンパイルエラーを得ました。もしPersonコンストラクタにthisを渡すperson1(this, 100)

//File: bus.h 
#ifndef BUS_H 
#define BUS_H 

#include <QObject> 
#include "person.h" 

class Bus : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Bus(QObject *parent = 0); 

private: 
    Person  person1; 
    Person  person2; 
}; 

#endif // BUS_H 


//File: bus.cpp 
#include "bus.h" 

Bus::Bus(QObject *parent) : QObject(parent) , person1(this,100), person2(this,200) 
{ 

} 



//File: person.h 
#ifndef PERSON_H 
#define PERSON_H 

#include <QObject> 
#include <QAbstractItemModel> 

class Person : public QAbstractItemModel 
{ 
    Q_OBJECT 
public: 
    explicit Person(QAbstractItemModel *parent = 0, int shoe_color=0); 
    QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const; 
    QModelIndex parent(const QModelIndex &child) const; 
    int rowCount(const QModelIndex &parent = QModelIndex()) const; 
    int columnCount(const QModelIndex &parent = QModelIndex()) const; 
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; 
private: 
    int m_shoe_color; 
}; 

#endif // PERSON_H 


//File: person.cpp 
#include "person.h" 

Person::Person(QAbstractItemModel *parent,int shoe_color) : QAbstractItemModel(parent) 
{ 
    m_shoe_color=shoe_color; 
} 
QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const { 

} 
QModelIndex parent(const QModelIndex &child) const { 

} 
int rowCount(const QModelIndex &parent = QModelIndex()) const { 

} 
int columnCount(const QModelIndex &parent = QModelIndex()) const { 

} 
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const { 

} 



//File: main.cpp 
#include <QCoreApplication> 
#include "person.h" 
#include "bus.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    Bus b; 
    return a.exec(); 
} 
+1

に人のコンストラクタを変更動作させるために

'。しかし、コンストラクタは 'QAbstractItemModel'を親として必要とします。 Busは 'QAbstractItemModel'のサブクラスではありませんが、もちろんエラーになります。どちらかがバスQAbstractItemModelの派生物を作るか、または明示的な人(QObjectを*親= 0、INT shoe_color = 0) 'に人のコンストラクタを変更、正しい' – lena

+0

@lena、。あなたは私がそれを受け入れると答えるかもしれません。 – Nulik

答えて

1

ラインにおいて、および現在のコンテキストでthisBusある:

これは例の完全なソースコードです。しかし、コンストラクタは親としてQAbstractItemModelを期待しています。

BusはQAbstractItemModelのサブクラスではないため、コンパイラエラーが発生しています。 `PERSON1(本、100)`あなたは `バスでのPersonコンストラクタに` this`を渡す:それはどちらかがバスQAbstractItemModelの派生作るか、またはこの行でexplicit Person(QObject *parent = 0, int shoe_color=0);