c++ - 视觉 C++ 2012 : compiler complains about "missing ' ;'"

标签 c++ visual-c++

<分区>

能否请您指出以下模板类有什么问题?

#include <vector>

template <typename T, typename C>
struct pQueue{
    pQueue():currEnd(c.end()){};
    ~pQueue(){c.~vector();}
    void insert(T& t);
    void remove(T& t);
    bool find(T& t);
    T head(void);
private:
    std::vector<T> c;
    std::vector<T>::iterator currEnd;
};

编译器对 std::vector<T>::iterator currEnd; 不是很满意行,并产生以下错误消息:

错误 C2146:语法错误:缺少“;”在标识符“currEnd”之前

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++不支持default-int

非常感谢!

最佳答案

编译器无法识别 std::vector<T>::iterator作为一种类型。你必须告诉它:

typename std::vector<T>::iterator currEnd;

typename在模板化上下文中用作消歧器。它只是告诉编译器标识符 std::vector<T>::iterator是类型而不是静态成员。标准在模板化上下文中要求这样做,即使在大多数情况下编译器甚至可以在模板参数 T 之前解决它。已指定。


虽然上面回答了您的问题,但我只能强调 juanchopanza 就您的代码指出的内容。此外,还有std::queue已经为你准备好了。

关于c++ - 视觉 C++ 2012 : compiler complains about "missing ' ;'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18466184/

相关文章:

查找数组大小的 C++ 模板/宏 "function"

c++ - 为什么 std::make_shared<>() 比 boost::make_shared() 有更好的性能?

c++ - 从不同进程可靠地写入同一文件

c++ - 确定服务器上已连接客户端的 IP 地址

C++ 编译器错误 - 'No matching function for call...'

c++ - 绘制小 map (游戏)

winforms - 使用 winforms 和 Managed C++ 浏览文件对话框

c++ - Qt 音乐流媒体

javascript - 将按钮绑定(bind)到键盘按钮和声音

c++ - lambda 表达式的右值和左值引用 - gcc 与 msvc