Нет совпадения для ‘operator * in’ (1.0e + 0 — ((double) u)) * bezPoints [i] [(j + 1)] ‘

Я получаю эту ошибку, пытаясь реализовать psuedocode Bezier Curve в C ++ в Qt, ниже приведена реализация метода.

    void GLWidget::drawBezierCurve() {
int N_PTS = vertices.size();
Point bezPoints[N_PTS][N_PTS];

for (float u = 0.0; u <= 1.0; u += 0.01){
for(int diag = N_PTS/2; diag >= 0;diag--){
for(int i = 0; i <= diag; i++){
int j = diag - i;
bezPoints[i][j] = (1.0 - u) * bezPoints[i][j+1] + u * bezPoints[i+1][j];
}
}
theImage.setPixel(bezPoints[0][0], bezPoints[0][0], RGBValue(100,12,140), 255);
}
}

0

Решение

Похоже, это потому, что вы умножаете float на объект Point. Скорее всего, вам понадобится определить собственный метод умножения для этой операции или перегрузить оператор *, чтобы выполнить это, в зависимости от того, на какие поля в объекте Point вы собираетесь умножать число с плавающей запятой.

Что-то вроде:

float operator* (const float num, const Point& point) {
return num * point.floating_point_field;
}

Где поле с плавающей точкой — это элемент класса, который вы хотите умножить, и он должен быть того же типа, что и число с плавающей запятой, в противном случае вам придется начать делать что-то более сложное для определения умножения.

В качестве альтернативы, если умножение так же просто, как в примере выше, вы можете просто использовать геттер в коде, например:

u * bezPoints[i][j+1].get_floating_point_value()

Надеюсь, это поможет,

Matt

1

Другие решения

Других решений пока нет …