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 的信息是私有的,节点无法访问,为了解决这个问题,我尝试让节点成为 Play 的朋友类。当我这样做时,我收到错误消息说“节点不是模板类型”。这个错误对我来说毫无意义,所以我认为这不是纠正我的问题的方法。

谢谢。

4

2 回答 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;
    }
};

编辑:在使用模板类时,您总是需要使用 <>,就像我在上面编辑的那样。

于 2013-10-16T09:18:38.207 回答
0

默认情况下,类中的所有属性都是私有的。struct改为a或public:在开头添加。

但我想这不是问题所在。使用时node *next, *prev;,请改用:

typedef typename node<T>* MyType;
MyType *next, *prev;
于 2013-10-16T09:17:05.727 回答