2012-10-15 5 views
1

그래서 현재 단일 연결 목록으로 대기열을 구현 중입니다. 모든 것이 정상적으로 진행되고 있지만 컴파일러는 dequeue 메서드에서 플래그를 지정하고 있습니다.템플릿 대기열에 넣기 방법에 선언되지 않은 식별자가 있습니다.

이 비주얼 스튜디오 나를 짖는 것입니다 :

오류 C2065 : '제거': 선언되지 않은 식별자 여기

만 제거 된 값을 반환하도록되어 내 디큐의 방법은 대기열에서 :

,369 : 여기
template <typename Type> 
Type QueueLinked<Type>::deque() { 
if (queueFront == 0) { 
    cout << "Queue is empty! There's nothing to remove!" << endl; 
} else { 
    nodeType<Type> *temp; 
    temp = queueFront; 
    queueFront = queueFront->next; 
    Type Removed = temp->dataItem; 
    delete temp; 

    if (queueFront == 0) { 
     queueRear = 0; 
    } 
} 
return Removed; 
} 

내 노드 구조체입니다
template <typename Type> 
struct nodeType { 
    Type dataItem; 
    nodeType<Type> *next; 
}; 

이것은 매우 단순한 오류가있는 것처럼 보이지만이 문제를 일으키는 것이 보이지 않습니다. 잘만되면 나는 너무 바보가 아니다. 그러나 그것은 처음이 아닐 것이다.

답변

1

블록 외부에 선언하면 물론 else 블록에 선언합니다. if 앞에 선언하십시오.

template <typename Type> 
Type QueueLinked<Type>::deque() { 
    Type Removed; 
    if (queueFront == 0) { 
    cout << "Queue is empty! There's nothing to remove!" << endl; 
    } else { 
    nodeType<Type> *temp; 
    temp = queueFront; 
    queueFront = queueFront->next; 
    Removed = temp->dataItem; 
    delete temp; 

    if (queueFront == 0) { 
     queueRear = 0; 
    } 
    } 
return Removed; 
} 
+0

당신은 100 % 권리를 위치 :

이 방법을 사용해보십시오. 나는 어떤 경우에만 선언 된 것을 반환하고있는 것을보아야 만했다. 신기한 실수이지만, 교훈을 얻었습니다. –

+1

아무 것도 제거되지 않았을 때 * 돌아오고있는 것을 정확히 물어볼 수도 있습니다! –

+0

나는 그 사실을 즉시 의심했다. 내 머리 속에서 나는 그것을 정당화했다. Removed를 정의되지 않은 상태로 남겨 두었지만, Matzi의 도움을받은 후에 고통스럽게 분명했다. 선언되지 않았다면 완전히 별개의 문제로 이어진다. –

관련 문제