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:183:5: предупреждение: в функции, которая должна возвращать значение, отсутствует оператор return [-Wreturn-type]
183 | }
| ^
Machinery/Classes/Node.cpp: В функции-члене «bool QuadNavigation<T>::isFullyConnectedQuad() const»:
Machinery/Classes/Node.cpp:60:18: ошибка: «haveNext» не имеет аргументов, зависящих от параметра-шаблона, поэтому должна быть доступна декларация «haveNext» [-fpermissive]
60 | haveNext() &&
| ^~~~~~~~
#pragma once
#ifndef __PARENTABLE_HPP_
#define __PARENTABLE_HPP_
#include "Nameable.h"
#include "../Interfaces/IParentable.hpp"
#include "../Interfaces/IConnectable.hpp"
#include "BaseGUISegmentClass.hpp"
#include <memory>
/**
* @brief Объект связанной нити. Квадратная навигация элементов.
*
* @tparam T
*/
template<typename T> class LinearNavigation : public Machinery::Interfaces::IConnectable
{
ParameterGetSetTypedDefault(std::unique_ptr<T*>, next_element, nullptr);
ParameterGetSetTypedDefault(std::unique_ptr<T*>, prev_element, nullptr);
public:
/**
* @brief Get the Left Element object
* Получить левый элемент.
* @return T&
*/
T& getLeftElement() const;
/**
* @brief Get the Right Element object
* Получить правый элемент.
* @return T&
*/
T& getRightElement() const;
public:
/**
* @brief Имеется ли следующий объект в связи.
*
* @return true
* @return false
*/
virtual bool haveNext() ;
/**
* @brief Имеется ли предыдущий объект в связи.
*
* @return true
* @return false
*/
virtual bool havePrev() ;
/**
* @brief Алиас (альтернативное имя) для функции hasPrev;
*
* @return true
* @return false
*/
inline virtual bool havePrevious() const {return havePrev();}
/**
* @brief Есть ли у объекта связи.
*
* @return true
* @return false
*/
inline virtual bool haveConnection() const {return haveNext() || havePrev();}
/**
* @brief Подключен ли объект.
*
* @return true
* @return false
*/
inline virtual bool isLinked() const {return haveConnection();}
};
/**
* @brief Квадратная навигация объектов. Связывания объектов лево / право , вверх / вниз.
*
* @tparam T
*/
template<typename T> class QuadNavigation : public LinearNavigation<T>
{
ParameterGetSetTypedDefault(std::unique_ptr<T*>, up_element, nullptr);
ParameterGetSetTypedDefault(std::unique_ptr<T*>, down_element, nullptr);
public:
/**
* @brief Get the Top Element object
* Получить верхний элемент.
* @return T&
*/
T& getTopElement() const;
/**
* @brief Get the Bottom Element object
* Получить нижний элемент.
* @return T&
*/
T& getBottomElement() const;
/**
* @brief Имеется ли верхнее соединений.
*
* @return true
* @return false
*/
bool haveTopConnected() const;
/**
* @brief Имеется ли нижнее соединение.
*
* @return true
* @return false
*/
bool haveBottomConnected() const;
/**
* @brief Проверить, полностью ли соединенный элемент.
*
* @return true
* @return false
*/
bool isFullyConnectedQuad() const;
};
#include <utility>
/**
* @brief Класс образующий Родитель / Дочерние связи, структуру.
*/
class Node : public Machinery::Classes::Nameable
{
//ParameterGetSetTyped(std::unique_ptr<void*>, content_data);
std::pair< QuadNavigation<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;
};
#endif // __PARENTABLE_HPP_
#include "Node.hpp"
template <typename T> bool LinearNavigation<T>::haveNext()
{
return get_next_element() ? true : false;
}
template <typename T> bool LinearNavigation<T>::havePrev()
{
return get_prev_element() ? true : false;
}
template<typename T> T& LinearNavigation<T>::getLeftElement() const
{
return *get_prev_element();
}
template<typename T> T& LinearNavigation<T>::getRightElement() const
{
return *get_next_element();
}
template<typename T> T& QuadNavigation<T>::getTopElement() const
{
return *get_up_element();
}
template<typename T> T& QuadNavigation<T>::getBottomElement() const
{
return *get_down_element();
}
template<typename T> bool QuadNavigation<T>::haveTopConnected() const
{
return getTopElement() ? true : false;
}
template<typename T> bool QuadNavigation<T>::haveBottomConnected() const
{
return getBottomElement() ? true : false;
}
template<typename T> bool QuadNavigation<T>::isFullyConnectedQuad() const
{
return
haveTopConnected() &&
haveBottomConnected() &&
haveNext() &&
havePrev();
}
Почему возникает ошибка.