2017-04-01 7 views
2

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

QQueueQList에서 상속 받았기 때문에이 작업을 수행하는 트릭을 발견했습니다. 당신이 함수에 외부에서이를 사용하려는 경우

+0

당신이 실제로 Qt는 버그 나 컴파일러 이후 생각 하는가 새로운 사용해야합니다 있도록

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

버그인지 아닌지는 잘 모르겠습니다. qqueue의 소스를 읽음으로써, 나는 생성자의 삭제를 볼 것으로 예상했으나 그렇지 않습니다. –

+0

qt의 버그 추적기에서 버그를 열어 볼 가치가 있다고 생각합니까? –