我正在实现一个双向链表,我正在使用我自己的对象作为存储的数据。
这是我的目标:
#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的信息是私有的,节点无法访问,为了解决这个问题,我尝试将节点作为Play的朋友类。当我这样做时,我得到错误,说“节点不是模板类型”。这个错误对我没有意义,所以我认为这不是解决问题的方法。
感谢。
答案 0 :(得分: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;
}
};
编辑:您始终需要使用&lt;&gt;使用模板类时,就像我在上面编辑的那样。
答案 1 :(得分:0)
默认情况下,类中的所有属性都是私有的。改为struct
或在开头添加public:
。
但我猜这不是问题。使用node *next, *prev;
时,请改用:
typedef typename node<T>* MyType;
MyType *next, *prev;