Моя функция c ++ не работает, и я не могу ее декодировать - PullRequest
0 голосов
/ 30 мая 2020

Привет, ребята, я новичок в C ++. У меня есть следующая функция в C ++, но она всегда выдает ошибку из-за функции "двойного перекрытия", и я не знаю почему. Может кто-нибудь сказать мне, что я делаю не так?

double overlap(vector<double> &R1, vector<double> &R2) {
    // overlap in the x dimension
    double xmin = max(R1[0], R2[0]);
    double xmax = min(R1[2], R2[2]);
    if (xmin >= xmax) return 0;

    // overlap in the y dimension
    double ymin = max(R1[1], R2[1]);
    double ymax = min(R1[3], R2[3]);
    if (ymin >= ymax) return 0;

    double overlap_area = (xmax-xmin)*(ymax-ymin)

    return overlap_area;
}

int main() {
    vector<int> R1;
    vector<int> R2;

    // Coordinates of the rectangles
    // with the .push_back() function we are adding the rectangles to our vector to give it to the algorithm.
    // x: x-coordinate, y: y-coordinate, w: weidth, h: height - (w,h: distance from left/botton to right/top side of the rectangle)
    int x1 = 0, y1 = 0, w1 = 6, h1 = 9;
    R1.push_back(x1);
    R1.push_back(y1);
    R1.push_back(w1);
    R1.push_back(h1);

    int x2 = 3, y2 = 4, w2 = 3, h2 = 3;
    R2.push_back(x2);
    R2.push_back(y2);
    R2.push_back(w2);
    R2.push_back(h2);



    cout << "Overlap = " << overlap(R1, R2) << endl;
}

Ответы [ 3 ]

1 голос
/ 30 мая 2020

Вы объявляете (вместе с определением) как получение двух ссылок на векторы двойников.

double overlap(vector<double> &R1, vector<double> &R2)
{ /* ... */ }

Вы вызываете с двумя векторами int

vector<int> R1;
vector<int> R2;
/* ... */ overlap(R1, R2) /* ... */

Если вы читаете ошибку сообщение внимательно, держу пари, он вам это скажет.

0 голосов
/ 30 мая 2020

В вашей программе 2 ошибки:

  1. Оператор double overlap_area = (xmax-xmin)*(ymax-ymin) должен быть double overlap_area = (xmax-xmin)*(ymax-ymin);

  2. Вы передаете std::vector<int> и приняв его как ссылку в функции как std::vector<double>, на что правильно указывает ошибка

    В функции 'int main ()': 43:43: error: неверная инициализация ссылки типа 'std :: vector &' из выражения типа 'std :: vector' 6: 8: примечание: при передаче аргумента 1 'двойное перекрытие (std :: vector &, std :: vector &)'

Вам необходимо изменить R1 и R2 в основном на double введите vector

0 голосов
/ 30 мая 2020

Вы используете vector<double> в качестве параметров для своей функции overlap. Но в вашем main() вы объявили два вектора типа int и передали их функции, которая выдает ошибку.

Просто объявите свои векторы как:

vector<double> R1;
vector<double> R2;

И добавьте двойные значения для них, и ваша программа будет работать нормально.

Примечание : ваша программа имеет незначительную ошибку синтаксиса , потому что у вас нет t указанная точка с запятой после:

double overlap_area = (xmax-xmin)*(ymax-ymin) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...