Qt creator C ++, значение void не игнорируется, как должно быть - PullRequest
0 голосов
/ 11 апреля 2011
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 ]

3 голосов
/ 11 апреля 2011

Вы не указали, что именно является вашим вопросом. Но вы используете дополнительные * в своих линиях с ошибками:

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

Кроме того, вы не показали, как вы добавляете в список. Я предполагаю, что предупреждение от вас присваивает адреса некоторых вычисленных QPoints. Он рухнет, даже если вы его скомпилируете. Просто используйте QList<QPoint>. Это не так тяжело.

1 голос
/ 11 апреля 2011

«получение временного адреса» является очень серьезным условием.

Вы также излишне разыменовываете ссылки для двух других ошибок.

1 голос
/ 11 апреля 2011

Если вы разыменуете points[i], вы получите объект типа QPoint&.Вы не можете использовать оператор -> для типов без указателя (то есть, если тип не предоставляет пользовательское определение оператора ->).

Поэтому удаление * перед этими двумя строками должно исправитьошибка.

Причина странных сообщений об ошибках заключается в том, что -> имеет более высокий приоритет, чем *, поэтому компилятор фактически пытается разыменовать возвращаемое значение setX / setY.

...