2017-01-17 1 views
2

이것은 C++에서 대기열 클래스의 구현입니다. 알아낼 수없는 것은 내가 삭제 된 요소를 반환하는 함수 삭제를 원하지만이 오류가 나타납니다. 'delete'이전의 무제한 -id가 필요합니다 ; 회원 선언 끝 부분에서대기열 클래스의 무효 삭제 멤버 함수

삭제 기능을 삭제하면 모든 기능이 정상적으로 작동하지만 존재하지 않을 수 있습니다. bfs를 사용하여 unweighted undirected 그래프에서 최단 경로를 찾으려고하는데 대기열, 특히 삭제 된 정점을 반환하는 대기열이 필요합니다.

class Queue 
    { 
    public: 
     Queue(int maxQueueSize):MaxSize(maxQueueSize) 
     { 
      queue=new int[MaxSize]; 
      front=rear=-1; 
     } 
     bool isFull() 
     { 
      if(rear==MaxSize-1) 
       return true; 
      else return false; 
     } 
     bool isEmpty() 
     { 
      if(front==rear) 
       return true; 
      else return false; 
     } 
     void add(const int& x) 
     { 
      if(isFull()) 
       return; 
      else 
        queue[++rear]=x; 
      } 
      int* delete() 
      { 
       int& x; 
       if(isEmpty()) 
        return 0; 
       else 
       { 
        x=queue[++front]; 
       } 
       return x; 
      } 
     private: 
      int front,rear; 
      int* queue; 
      int MaxSize; 
     }; 
+11

'delete'는 예약어입니다. 식별자에 이러한 이름을 사용할 수 없습니다. –

+1

다음은 예약어 목록 [link] (http://en.cppreference.com/w/cpp/keyword)입니다. 이 이름들을 식별자로 사용할 수 없습니다. –

+4

'if (condition) true를 반환하고 그렇지 않으면 false를 반환합니다. '는 반 패턴입니다. 대신'return condition;'을 써라! –

답변

1

'delete'는 C++의 예약 키워드입니다.
예약 키워드 here 목록을 참조하십시오.

'제거'또는 이와 비슷한 이름으로하는 것이 더 좋습니다.
더 나은 것은 std :: queue <>을 사용하는 것뿐입니다. 이미 잘 작성되었으며 테스트를 거쳐야합니다.

+0

대기열 클래스의 팝이 void를 반환하기 때문에 STL을 사용하지 않으려했습니다. 고마워요 :) – Sara

+0

그건 의도적으로입니다. std :: queue :: front()를 호출하여 다음 요소를 얻은 다음 std :: queue :: pop()을 호출하여 제거해야합니다. – roalz

관련 문제