2017-04-01 128 views
2

A QList<T>讓我使用初始值列表對一些條目進行初始化。無法用初始值列表初始化QQueue

Queue<T>一樣,給我一個編譯器錯誤。

示例代碼不能編譯:

QList<qreal> someNumbers { 0.0, 0.1 }; 
QQueue<qreal> someOtherNumbers { 0.0, 0.1 }; 

編譯器輸出:

error: no matching function for call to 'QQueue<double>::QQueue(<brace-enclosed initializer list>)' 
    QQueue<qreal> someOtherNumbers { 0.0, 0.1 }; 
              ^
qqueue.h:49:7: note: candidate: QQueue<double>::QQueue() 
class QQueue : public QList<T> 
    ^
qqueue.h:49:7: note: candidate expects 0 arguments, 2 provided 
qqueue.h:49:7: note: candidate: QQueue<double>::QQueue(const QQueue<double>&) 
qqueue.h:49:7: note: candidate expects 1 argument, 2 provided 
qqueue.h:49:7: note: candidate: QQueue<double>::QQueue(QQueue<double>&&) 
qqueue.h:49:7: note: candidate expects 1 argument, 2 provided 

是否有某種方式使用初始化列表初始化一個QQueue<T>

回答

1

由於QQueue繼承自QList,我發現了一個技巧來做到這一點。

QQueue<double> *queue; 
QList<double> list = {{0.0, 1.1}}; 
queue = reinterpret_cast<QQueue<double> *>(&list); 
qDebug() << queue->isEmpty(); 
while (!queue->isEmpty()) { 
    qDebug() << queue->dequeue(); 
} 

然而,在這個例子中,列出它暫時的,所以如果你想用這個以外的功能,你將不得不使用新

+0

你認爲這實際上是在QT或錯誤的編譯器,因爲構造函數應該保持不變? –

+0

我不知道這是否是一個錯誤。通過閱讀qqueue的來源,我期望看到構造函數的刪除,但事實並非如此。 –

+0

你認爲值得在qt的bug跟蹤器中打開一個bug嗎? –