std :: необязательно <T>вызов по ссылке - PullRequest
0 голосов
/ 08 апреля 2020

Я реализую следующую функцию:

bool DenStream::_try_merge(const double sample,
                           const double weight,
                           const std::optional<MicroCluster>& micro_cluster) const {
    if (micro_cluster) {
        MicroCluster micro_cluster_copy(*micro_cluster);
        micro_cluster_copy.insert_sample(sample, weight);
        if (micro_cluster_copy.get_radius() <= this->eps) {
            micro_cluster.insert_sample(sample, weight); // THIS DOES NOT WORK
            return true;
        }
    }
    return false;
};

Компилятор сообщает: ошибка: у 'const class std :: option' нет члена с именем 'insert_sample' .

Я понимаю ошибку, но мне не удалось найти решение, которое работает. Если я напишу

*micro_cluster.insert_sample(sample, weight);

, компилятор скажет error: «const class std :: option» не имеет члена с именем «insert_sample» . Я также пытался использовать emplace () и value ().

Буду признателен, если кто-нибудь сможет мне помочь.

Хорошо, теперь это работает. Как предлагается в комментариях, я изменил на

micro_cluster->insert_sample(sample, weight);

, и интерфейс должен быть

bool DenStream::_try_merge(const double sample,
                           const double weight,
                           std::optional<MicroCluster>& micro_cluster)

Спасибо!

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