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 の情報は非公開で node からアクセスできないため、この問題が発生したと思います。これを修正するために、node を Play のフレンド クラスにしてみました。すると、「ノードはテンプレート タイプではありません」というエラーが表示されます。エラーは私には意味がないので、これは私の問題を修正する方法ではないと思います。

ありがとう。

4

2 に答える 2

0

クラス内のすべての属性は、デフォルトで非公開です。代わりにするか、先頭structに追加します。public:

しかし、それは問題ではないと思います。を使用する場合node *next, *prev;は、代わりにこれを使用します。

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