Как я могу исправить эту ошибку: недопустимые операнды в бинарном выражении ('std :: vector <double>' и 'double')? - PullRequest
0 голосов
/ 17 июня 2019

Я хочу получить среднее значение некоторых показаний гироскопа, и оно включает в себя деление типа std::vector<double> на тип double, но я получаю следующую ошибку, которая сообщает

Недопустимые операнды двоичному выражению ('std :: vector' и 'double')

Как мне решить эту проблему?


    double n_readings;
    std::vector<double> gyro_reading;
    for(int i = 0; i < n_readings; i++) {

        gyro_reading.push_back(gyro_z());
        msleep(1);

    }

    double average = gyro_reading/n_readings;

1 Ответ

5 голосов
/ 17 июня 2019

Ваш звонок на gyro_reading/n_readings требует определения оператора / между типами std::vector<T> и T. Стандартный вектор не имеет такого оператора. Даже если бы это было так, результатом, вероятно, было бы элементарное деление, а не уменьшение суммы, а затем деление.

Следующее:

#include <iterator>
#include <numeric>
//...
double average = std::accumulate(std::begin(gyro_reading),std::end(gyro_reading), 0.0) / n_readings;

будет накапливать все элементы gyro_reading, сокращение выполняется с использованием operator+ по умолчанию, затем делится на n_readings. Кроме того, вы можете использовать gyro_reading.size() вместо n_readings, поскольку это всегда будет согласованно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...