2015-11-12 2 views
0

я обращенную ошибку при попытке добавить ссылку на объект для вектора указателей: сообщенияНевозможно преобразовать «сопзЬ T *» к «T * &&»

template <class Tpoint, class Tmodel> Tmodel ransac<Tpoint, Tmodel>::perform_fitting(const std::vector<Tpoint>& data){ 
    std::vector<Tpoint*> also_inliers; 
    for (const auto& pnt : data){ 
     if (fit_point(pnt, may_be_model) <= t){ 
      also_inliers.push_back(&pnt); //error here 
     } 
    } // ! for range 
} 

Ошибка с VS.NET 2013:

ошибка 88 ошибка C2664: 'пустота станд :: вектор> :: push_back (резюме :: Point_ * Const &)': не удается преобразовать аргумент 1 из 'сопзЬ сорта :: Point_ *' в « сорта :: Point_ * & &

+0

Вам не хватает 'const' в объявлении вашего' std :: vector'. Это должно быть 'std :: vector '. –

ответ

4

Вы снимаете pnt как const auto&, но затем пытаетесь вставить его в вектор, содержащий указатели не константы. Это нарушает const-correctness.

Любое изменение also_inliers на std::vector<const Tpoint*>, если вы не собираетесь изменять эти объекты объекта или снимать auto&, если вам нужна модификация.

Смежные вопросы