Как получить ссылку на структуру в классе? Задача: в getfirst() вернуть ссылку на структуру, на которую указывает first или значение first. При попытке это сделать возникает Проблема. Проблема: ошибка синтаксиса (вероятно, в заголовке определения функции). Перепробовал все мыслимые варианты (думаю, перечислять их бессмысленно?) Обрезал всё лишнее в программе чтобы сразу проблемное место было видно. Помогите студенту, пожалуйста.template class storage { struct storagestruct { T item; storagestruct* next = nullptr; }; private: storagestruct* first = nullptr; public: storage() {}; virtual ~storage(); storagestruct& getfirst(); }; template storage::storagestruct& storage::getfirst() { return *first; }
Проблема здесь в том, что вы пытаетесь вернуть ссылку на структуру, которая не является членом класса. Вместо этого вы должны вернуть указатель на структуру, на которую указывает first.
Исправленный код будет выглядеть следующим образом:
template <class T> class storage { struct storagestruct { T item; storagestruct* next = nullptr; }; private: storagestruct* first = nullptr; public: storage<T>() {}; virtual ~storage(); storagestruct* getfirst(); }; template<class T> typename storage<T>::storagestruct* storage<T>::getfirst() { return first; }
Теперь getfirst возвращает указатель на первую структуру в списке, на которую указывает first.
Проблема здесь в том, что вы пытаетесь вернуть ссылку на структуру, которая не является членом класса. Вместо этого вы должны вернуть указатель на структуру, на которую указывает first.
Исправленный код будет выглядеть следующим образом:
template <class T>class storage
{
struct storagestruct
{
T item;
storagestruct* next = nullptr;
};
private:
storagestruct* first = nullptr;
public:
storage<T>() {};
virtual ~storage();
storagestruct* getfirst();
};
template<class T>
typename storage<T>::storagestruct* storage<T>::getfirst()
{
return first;
}
Теперь getfirst возвращает указатель на первую структуру в списке, на которую указывает first.