Как установить тип возвращаемого значения функции-члена класса в качестве объекта частной структуры - PullRequest
0 голосов
/ 29 мая 2018

извините за длинный и запутанный заголовок, но я не мог придумать лучшего способа спросить это.Итак, у меня есть класс:

template <typename T>
class Set
{
    public:
        //random member functions here
    private:
        struct Node{
            T key;
            Node *right;
            Node *left;
            int height;
        };
    public:
        Node* r_add(Node *temp);
};


Node* Set<T>::r_add(Node *temp)
{
    return temp;
}

Когда я пытаюсь реализовать функцию r_add, я получаю сообщение об ошибке, что тип возвращаемого определения вне строки отличается от возвращаемого в объявлении дляфункция r_add.Я не совсем понимаю, как объявлять тип возвращаемого значения, когда я пытаюсь вызвать закрытую структуру в функции-члене класса.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018
template <typename T>
typename Set<T>::Node* Set<T>::r_add(typename Set<T>::Node* temp)
{
    return temp;
}

вот моя реализация map , и вы можете найти решение вашей проблемы

0 голосов
/ 29 мая 2018

Синтаксис для этого должен быть:

template <typename T>
Set<T>::Node* Set<T>::r_add(Node *temp)
{
    return temp;
}

Обратите внимание, что вам не нужно использовать Set<T>::Node* для типа аргумента, так как область действия Set<T> будетиспользоваться для Node в этой точке.

Другой вариант - использовать конечный тип возврата.Это позволит вам избежать ввода Set<T> больше, чем необходимо.

template <typename T>
auto Set<T>::r_add(Node *temp) -> Node*
{
    return temp;
}
...