У меня есть следующая структура данных:
shared_ptr<vector<shared_ptr<Drawable>>> foo;
И класс Renderer с функцией:
void addObject(weak_ptr<T> _obj) const
Эта функция просто возвращает _obj в
mutable vector<weak_ptr<T>> m_objects;
Когда я пытаюсь сделать следующее:
Renderer r;
for(auto& d: *foo) {
r.addObject(d);
}
Я получаю следующую ошибку с GCC 5.1:
error: no match for 'operator==' (operand types are 'std::weak_ptr<Drawable>' and 'const std::weak_ptr<Drawable>')|
Я не понимаю, откуда исходит const.
foo
не является константой ни в коем случае, а addObject не принимает константную слабую_птр.
РЕДАКТИРОВАТЬ: Я думаю, что я был слишком минимальным.Вот содержимое addObject:
void addObject(std::weak_ptr<T> _obj) const {
auto it = std::find(m_objects.begin(), m_objects.end(), _obj);
if(it == m_objects.end()) {
m_objects.push_back(_obj);
}
};
Это работает, если я закомментирую все, кроме фактической строки push_back.Я предполагаю, что итератор назначает себя в качестве итератора для const weak_ptr.Я просто хочу не добавлять его в вектор, если он уже существует.