Следующим узлом двусвязного списка является приватный

0

Я реализую дважды связанный список, и я использую свой собственный объект в качестве хранимых данных.

Вот мой объект:

#ifndef PLAY_H_INCLUDED
#define PLAY_H_INCLUDED
#include <string>

class Play
{
private:
    int m_quarter;
    int m_minutes;
    std::string oTeam;
    std::string dTeam;
    int m_down;
    int m_yardToGO;
    int m_startLoc;
    int playDesc;
    std::string wholePlay;
    int relevance;
    int relCounter;
public:
    int getQuarter();
    int getMinutes();
    std::string getoTeam();
    std::string getdTeam();
    int getDown();
    int getYard();
    int getStartLoc();
    int getPlayDesc();
    std::string getwholePlay();
    Play(int quarter, int minutes, std::string offense, std::string defense, int dwn, int ytg, int start, int desc, std::string play, int relevance, int relCounter);
    ~Play();
    Play parse(std::string toParse);
    std::string findPlay(std::string playDesc);
};

#endif // PLAY_H_INCLUDED

-

Вот мой узел:

template<class T>
class node{
    friend class Play;
    T data;
    node *next, *prev;
    node(const T& t, node *n = 0, node *p = 0) {data=t; next=n; prev=p;}
};

Точная ошибка, которую я получаю:

error: node<Play>* node<Play>::next is private.

Я предполагаю, что получаю эту проблему, потому что информация о воспроизведении является частной и недоступной для узла, и, чтобы исправить это, я попытался сделать узел другом классом Play. Когда я это сделал, я получаю ошибки, говорящие, что "узел не является типом шаблона". Ошибка не имеет для меня никакого смысла, поэтому я полагаю, что это не способ исправить мою проблему.

Благодарю.

Теги:
doubly-linked-list

2 ответа

1
Лучший ответ

Использовать public: над свойствами, которые должны быть общедоступными. Если вы ничего не укажете, все станет частным.

template<class T>
class node{
    public: // ADD THIS
    friend class Play;
    T data;
    node<T> *next, *prev;
    node(const T& t, node<T> *n = 0, node<T> *p = 0) { // EDIT

        data=t; next=n; prev=p;
    }
};

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

0

Все атрибуты в классе по умолчанию являются закрытыми. Сделать стартовой- struct вместо или добавить public: в самом начале.

Но я думаю, что это не проблема. При использовании node *next, *prev; , используйте вместо этого:

typedef typename node<T>* MyType;
MyType *next, *prev;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню