【问题标题】:Cannot initialize QQueue with initializer list无法使用初始化列表初始化 QQueue
【发布时间】:2017-04-01 11:46:07
【问题描述】:

QList<T> 让我可以使用初始化列表通过一些条目对其进行初始化。

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&lt;T&gt;

【问题讨论】:

    标签: c++ qt qlist


    【解决方案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();
    }
    

    然而,在这个例子中,它是临时列出的,所以如果你想在函数之外使用它,你将不得不使用 new

    【讨论】:

    • 由于构造函数应该保持不变,您认为这实际上是 qt 还是编译器中的错误?
    • 不知道是不是bug。通过阅读 qqueue 的源代码,我希望看到构造函数被删除,但事实并非如此。
    • 您认为值得在 qt 的错误跟踪器中打开错误吗?
    • 我想你可以试试看他们会回答什么。我很好奇他们是不是故意这样做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2018-07-15
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多