2013-10-16 2 views
0

템플릿 기반 노드가있는 자체 이중 연결 목록을 구현했습니다. 이 노드를 통해 gunctions를 가진 내 자신의 객체 (Play)를 저장하고 내 목록의 반복기를 만들었습니다. 나는 내 나는이에 액세스 할 방법 을 둘 것입니다 무엇에 대한 손실에 있어요get 함수를 사용하여 노드에 저장된 데이터에 액세스

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

template<typename T> 
class Iterator{ 
    public: 
     Iterator(node<T> *np=0) : nodePtr(np) {} 

     T& operator*() const {return nodePtr->data;} 

     Iterator<T> &operator++(){ 
      nodePtr = nodePtr->next; 
      return *this; 
     } 

     Iterator<T> operator++(int){ 
      Iterator<T> Temp(nodePtr); 
      nodePtr = nodePtr->next; 
      return Temp; 
     } 

     bool operator==(Iterator<T> i) { return nodePtr == i.nodePtr; } 
     bool operator!=(Iterator<T> i) { return nodePtr != i.nodePtr; } 

    private: 
     node<T> * nodePtr; 
}; 

:

for(DLL<Play>::iterator itr=PlayList.begin(); itr!=PlayList.end(); itr++) 
       if(offense==*how do I access this*getoTeam()){ 

은 여기 내 노드와 반복자 코드입니다. 왜 그런지 설명해 주시면 고맙겠습니다.

감사합니다.

#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; 
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); 
    ~Play(); 
    Play parse(std::string toParse); 
    std::string findPlay(std::string playDesc); 
}; 

#endif // PLAY_H_INCLUDED 
+1

그냥 나야하지만 난 꽤 실제 문제가 무엇인지 표시되지 않으면 모르겠어요에게 사용할 수 있습니다 구현해야합니다. – DogDog

+0

코드의 첫 번째 줄에있는 두 번째 줄에서 나는 내가 범죄로 저장 한 것이 현재 노드 (getfunction이있는 내 개체)에 대한 위반 사항과 같은지 확인하고 싶습니다. 기본적으로, 내가 "* 이것을 어떻게 접근 할 것인가?"라고 적어 넣으면 범죄와 비교할 수 있습니다. –

답변

1

itr 유형 Iterator<Play>입니다 가정, offense == (*itr).getoTeam()를 사용

그냥 넣다

, 여기 내 재생 개체입니다.

*itrIterator<Play>::operator*()을 호출하면 Play&을 반환하고 getoTeam()을 호출 할 수 있습니다. 일관성을 위해, 당신은 또한

T* Iterator::operator->() {return &nodePtr->data;} 

이 방법, 당신은 더 익숙한 표기 offense == itr->getoTeam()

+0

아하, 컴파일됩니다. 그것은 올바른 방향으로 나아가는 단계입니다. –

관련 문제