Nightmare1
@Nightmare1
Программист

Почему возникает эта ошибка?

In file included from Machinery/Classes/Node.cpp:1:
Machinery/Classes/Node.hpp: В функции-члене «Node& Node::find_in_nodes_by_name(const std::string&) const»:
Machinery/Classes/Node.hpp:181:55: ошибка: использование удаленной функции «std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [с _Tp = Node*; _Dp = std::default_delete<Node*>]»
  181 |       for(auto item : links_pair.second.get_childrens());
      |                                                       ^
In file included from /usr/include/c++/12.1.0/memory:76,
                 from Machinery/Classes/../Interfaces/IParentable.hpp:7,
                 from Machinery/Classes/Node.hpp:6:


Почему возникает ошибка?

#include <utility>

/**
 * @brief Класс образующий Родитель / Дочерние связи, структуру.
 */
class Node : public Machinery::Classes::Nameable
{
  //ParameterGetSetTyped(std::unique_ptr<void*>, content_data);

  std::pair< LinearNavigation<Node>, Machinery::Interfaces::Parentable<Node*> > links_pair;

  public:

    /**
     * @brief Есть ли дочерние элементы объекта.
     * 
     * @return true 
     * @return false 
     */
    inline virtual bool haveChildNodes() const {return !links_pair.second.get_childrens().empty();}

    /**
     * @brief Есть ли родительские элементы объекта.
     * 
     * @return true 
     * @return false 
     */
    inline virtual bool haveParentNodes() const {return !links_pair.second.get_parents().empty();}

    /**
     * @brief Есть ли следующий связанный элемент.
     * 
     * @return true 
     * @return false 
     */
    virtual bool haveNextNode() const {return haveNextNode();}

    /**
     * @brief Есть ли предыдущий связанный элемент.
     * 
     * @return true 
     * @return false 
     */
    inline virtual bool havePrevNode() const {return havePrevNode();}

    /**
     * @brief Find node by it's name.
     * Поиск элемента по имени.
     * @param name 
     * @return Node<T>& 
     */
    inline Node & find_in_nodes_by_name(const std::string & name) const
    {
      for(auto item : links_pair.second.get_childrens());
        //if(item->getName().find(name) != item->getName().end()) return item;
    }

    //inline Node& find_in_nodes_next_one_by_name(const std::string & name) const;
    //inline Node& find_in_nodes_prev_one_by_name(const std::string & name) const;
    //inline Node& find_in_nodes_next_one_by_name_cycled(const std::string & name) const;
};
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Надо смотреть, что там get_childrens возвращает. Судя по ошибке, там где-то замешаны unique_ptr, которые нельзя просто копировать.

Подозреваю, что ошибка исправится, если в for сделать item ссылкой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы