2016-10-14 2 views
-1

popRight 또는 popLeft를 컴파일하려고하면이 오류가 발생합니다. 왜? 여기에 코드가 있습니다.왜 오류가 발생합니까? 회원의 사용이 잘못되었습니다 ('&'를 잊었습니까?)?

큐에서 클래스

#include "node.h" 
template <class T> 
class Dequeue 
{ 
    public: 
     void pushLeft(T data); 
     void popLeft(); 
     T left(); 
     void pushRight(T data); 
     void popRight(); 
     T right(); 
     bool empty(); 
    private: 
     int length; 
}; 

template<typename T> 
bool Dequeue<T>::empty() 
{ 
    if (length == 0) 
    { 
     return true; 
    } 
    else 
     return false; 
} 

template<typename T> 
void Dequeue<T>::pushLeft(T data) 
    { 
     if (empty() == true) 
     { 
      left->setData(data); 
      right->setData(data); 
     } 
     else if (left->getData() == right->getData()) 
     { 
      left->setData(data); 
     } 
     else 
     { 
      node<T> *aux = new node<T>; 
      aux->setData(data); 
      left->setPrevious(aux); 
      aux->setNext(left); 
      left = aux; 
     } 
     length++; 

    } 

template<typename T> 
    void Dequeue<T>::pushRight(T data) 
    { 
     if (empty() == true) 
     { 
      right->setData(data); 
      left->setData(data); 
     } 
     else if (right->getData() == left->getData()) 
     { 
      right->setData(data); 
     } 
     else 
     { 
      node<T> *aux = new node<T>; 
      aux->setData(data); 
      right->setPrevious(aux); 
      aux->setNext(right); 
      right = aux; 
     } 
     length++; 
    } 

template<typename T> 
void Dequeue<T>::popLeft() 
    { 
     node<T> *node = left->getNext(); 
     node->setPrevious(NULL); 
     left = node; 
    } 

template<typename T> 
void Dequeue<T>::popRight() 
{ 
     node<T> *node = right->getPrevious(); 
     node->setNext(NULL); 
     right = node; 
    } 

노드 클래스

template <class T> 
class node 
{ 
    public: 
     node(T data); 
     node(T data, node<T>* next); 
     T getData(); 
     node<T>* getNext(); 
     void setData(T data); 
     void setNext(node<T>* next); 
     void setPrevious(node<T>* previous); 
    private: 
     T data; 
     node<T> *next; 
     node<T> *previous; 
     node<T> *left; 
     node<T> *right; 
}; 

template <typename T> 
node<T>::node(T data) 
{ 
    this->data = data; 
    this->next = NULL; 
    this->previous = NULL; 
} 

template <typename T> 
node<T>::node(T data, node<T>* next) 
{ 
    this->data = data; 
    this->next = next; 
    this->previous = previous; 
} 

template <typename T> 
T node<T>::getData() 
{ 
    return this->data; 
} 

template <typename T> 
node<T>* node<T>::getNext() 
{ 
    return this->next; 
} 

template <typename T> 
void node<T>::setData(T data) 
{ 
    this->data=data; 
} 

template <typename T> 
void node<T>::setNext(node<T>* next) 
{ 
    this->next = next; 
} 

template <typename T> 
void node<T>::setPrevious(node<T>* previous) 
{ 
    this->previous = previous; 
} 
필자는 시간처럼이 문제를 해결하기 위해 노력하지만 난 그냥 누군가가 도움을 줄 수 없습니다

?

+0

정확히 어떤 오류가 있습니까? 어느 선 이요? – skypjack

+0

'왼쪽'과 '오른쪽'은 기능입니다. 그건 그렇고, 오류가있는 라인에 최소한 의견을 두는 것이 좋았을 것입니다. – krzaq

+0

이 줄에 가져 오기 : 노드 * node = right-> getPrevious(); 다음과 같은 오류가 발생합니다 right = node; – IAAL96

답변

3

leftright을 기능으로 선언했습니다. 하지만 코드의 나머지 부분에서 변수를 사용해야하는 방식은 분명합니다.

class Dequeue 
{ 
    public: 
     void pushLeft(T data); 
     void popLeft(); 
     T left; 
     void pushRight(T data); 
     void popRight(); 
     T right; 
     bool empty(); 
    private: 
     int length; 
}; 
관련 문제