2011-09-24 2 views
1

STL 대기열에서 푸시 및 팝 기능을 무시하려고합니다. 템플릿을 사용해야한다고 생각합니다. 나는 'MyQueue'형식 (이 오류 내 main.cpp 파일에 있음) 및 '<'토큰 전에 예상 된 이니셜 라이저 말하는 오류가 발생합니다.큐 STL 개체의 일부 함수를 재정의하려면 어떻게합니까?

#include "MyQueue.h" 

sem_t EmptySem; 
sem_t PresentSem; 
sem_t mutex; 

MyQueue::MyQueue() 
{ 
    sem_init(&EmptySem, PTHREAD_PROCESS_SHARED, QSIZE); 
    sem_init(&PresentSem, PTHREAD_PROCESS_SHARED, 0); 
    sem_init(&mutex, PTHREAD_PROCESS_SHARED, 1); 
} 

template <class Elem> 
void queue<Elem>::push(const Elem &Item) 
{ 
    sem_wait(EmptySem); 
    sem_wait(mutex); 
    super.push(Item); 
    sem_post(mutex); 
    sem_post(PresentSem); 
} 
template <class Elem> 
Elem queue<Elem>::pop(void) 
{ 
    Elem item; 
    sem_wait(PresentSem); 
    sem_wait(mutex); 
    item = super.front(); 
    super.pop(); 
    signal(mutex); 
    signal(EmptySem); 
    return item; 
} 

감사 : 여기에 코드의 조각입니다!

답변

4

가상으로 정의되지 않은 기능을 재정의 할 수 없습니다. 그래서 당신은 공개적으로 std :: queue를 상속 받아 아무것도 얻지 못합니다.

MyQueuestd::queue 회원이 저장된 것이 가장 좋습니다. 그렇게하면 원하는 모든 작업을 수행 할 수 있으며 기능을 std::queue 회원에게 전달할 수 있습니다.

또한 C++에는 키워드 super이 없습니다. 그것은 자바입니다.

관련 문제