Я реализую дважды связанный список, и я использую свой собственный объект в качестве хранимых данных.
Вот мой объект:
#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. Когда я это сделал, я получаю ошибки, говорящие, что "узел не является типом шаблона". Ошибка не имеет для меня никакого смысла, поэтому я полагаю, что это не способ исправить мою проблему.
Благодарю.
Использовать 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;
}
};
Изменение: вам всегда нужно использовать <> при использовании классов шаблонов, например, я редактировал выше.
Все атрибуты в классе по умолчанию являются закрытыми. Сделать стартовой- struct
вместо или добавить public:
в самом начале.
Но я думаю, что это не проблема. При использовании node *next, *prev;
, используйте вместо этого:
typedef typename node<T>* MyType;
MyType *next, *prev;