如何正确使用std :: queue作为模板类中的元素?

时间:2010-09-08 09:13:17

标签: c++ templates

我是C ++的新手,对模板的经验有限。目前,我正在尝试根据提供的here示例实现并发队列。我在编译它时遇到问题并且不断收到错误,指出“ISO C ++禁止声明'队列'没有类型”,即使在我将代码剥离到以下简单示例之后:

template<typename Data> class concurrent_queue {
private:
    std::queue<Data> the_queue;

public:
    void push(Data const& data) {
        the_queue.push(data);
    }

    bool empty() const {
        return the_queue.empty();
    }

    void pop(Data& popped_value) {
        popped_value=the_queue.front();
        the_queue.pop();
    }
};

int main(int argc, char** argv) {
    concurrent_queue<std::string> Q;

    // Simple test code will go here
}

由于我为队列提供了“数据”类型,因此我对此感到有些困惑。有人可以帮我指出我做错了吗?

2 个答案:

答案 0 :(得分:3)

您是否已加入<queue>?听起来好像编译器不知道std::queue是模板。因此,它认为你是在第三行定义它,但它无法弄清楚queue的类型是什么。

答案 1 :(得分:2)

您在文件开头缺少#include <queue>#include<string>