2011-09-24 51 views
1

我想重写STL队列中的push和pop函数。我想我需要使用模板。我收到了“myQueue中”没有指定类型(这个错误是我的main.cpp文件)和错误才说“<”令牌预期初始化。以下是代码片段:如何覆盖Queue 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公开继承没有任何好处。

如果存储,这是一个std::queue成员MyQueue这将是最好的。这样,你可以做任何你想做的事,只需将这些功能转发给std::queue成员即可。

此外,C++没有关键字super;那是Java。