2

RoutineItem という名前のカスタム オブジェクトで QVector を使用しようとしています。

しかし、このエラーが表示されます:

C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265: error: no matching function for call to 'RoutineItem::RoutineItem()'

これは RoutineItem コンストラクターです。

RoutineItem(QString Name,int Position,int Time,bool hasCountdown = false,bool fastNext = false);

すべてのコンストラクター引数を削除すると、そのエラーは発生しなくなります。引数を持つカスタム オブジェクトで QVector を使用するにはどうすればよいですか?

4

3 に答える 3

7

問題は、QVector が要素にデフォルトのコンストラクター (エラーメッセージについて) を持っていることを要求することです。クラスで定義できます。例えば:

class RoutineItem {
    RoutineItem(QString Name, int Position,
                int Time, bool hasCountdown = false,
                bool fastNext = false);
    RoutineItem();
    [..]
};

または、すべての引数にデフォルト値を持たせることができます:

class RoutineItem {
    RoutineItem(QString Name = QString(), int Position = 0,
                int Time = 0, bool hasCountdown = false,
                bool fastNext = false);
    [..]
};

または、RoutineItem のデフォルト値を構築し、それによってすべてのベクター項目を初期化できます。

RoutineItem item("Item", 0, 0);
// Create a vector of 10 elements and initialize them with `item` value
QVector<RoutineItem> vector(10, item);
于 2014-06-19T11:32:45.717 に答える
2

QVector コンストラクターでデフォルト以外の引数を提供する

例: 以下は、同じ, ,RoutineItemを持つ 10 個の要素を作成します。NamePositionTime

QVector<RoutineItem> foo(10, RoutineItem("name", 123, 100 ));
                                            ^     ^     ^
                                            |     |     |
                                            +-----+-----+-----Provide arguments
于 2014-06-19T11:33:12.640 に答える
2

C++11 と を使用する場合はstd::vector、デフォルトの構築可能性に対する要件はもうありません。

void test()
{
   class C {
   public:
      explicit C(int) {}
   };

   std::vector<C> v;
   v.push_back(C(1));
   v.push_back(C(2));
}

このコードは C++11 より前では機能せず、QVector.

于 2014-06-19T20:20:32.213 に答える