Qt创建者C ++,不应忽略void值,因为它应该是

时间:2011-04-10 20:15:18

标签: c++ qt qt-creator

QList<QPoint*> DrawingWidget::getCloseLinesById(int m_x, int m_y) {
    QList<QPoint*> lines;
    // HERE I APPEND ABOUT 5 ITEMS 

    return lines;
}

附加内容适用于此处。它只给了我一些警告,但它仍然编译。警告是。

taking address of temporary

但是这个

void DrawingWidget::mouseMoveEvent(QMouseEvent *event) {
    if(m_mainWindow->getSelectedTool() == MainWindow::moveVertexTool) {
        m_x = event->x();
        m_y = event->y();
            QList<QPoint*> points = getCloseLinesById(event->x(), event->y());
            for(int i = 0; i < points.size(); i++) {
                *points[i]->setX(event->x()); //error on this line
                *points[i]->setY(event->y()); // error on this line
            }
            update();
        }
    }
}

导致这些错误:

void value not ignored as it ought to be
void value not ignored as it ought to be

因此它为两条线提供了相同的错误。

当我移动鼠标时,这段代码应该基本上移动我的线条。

如何解决此问题?

3 个答案:

答案 0 :(得分:3)

您没有说明您的问题究竟是什么。但是你在错误的行中使用了额外的*

points[i]->setX(event->x());

此外,您没有显示您如何附加到列表中。我的猜测是警告来自你分配一些计算QPoints的地址。即使你编译它也会崩溃。只需使用QList<QPoint>即可。它并不那么重。

答案 1 :(得分:1)

如果取消引用points[i],您将获得类型为QPoint&的对象。您无法在非指针类型上使用->运算符(除非该类型提供->运算符的自定义定义)。

因此,删除这两行前面的*应该可以解决错误。

奇怪错误消息的原因是,->的优先级高于*,因此编译器实际上尝试取消引用setX / {{1}的返回值}。

答案 2 :(得分:1)

'接受临时'是一个非常严重的情况。

您还可以不必要地解除其他两个错误。