C++ 模板 std::vector::iterator 错误

标签 c++ templates vector iterator

在 C++ 中,我试图获得 std::vector::iterator对于我的模板类。但是,当我编译它时,出现错误:error C2146: syntax error : missing ';' before identifier 'iterator' , error C4430: missing type specifier - int assumed. Note: C++ does not support default-int .我也收到警告:warning C4346: 'std::vector<T>::iterator' : dependent name is not a type :

#include <vector>
template<class T> class v1{
    typedef std::vector<T>::iterator iterator; // Error here
};
class v2{
    typedef std::vector<int>::iterator iterator; // (This works)
};

我试过了

template<typename T> class v1{
    typedef std::vector<T>::iterator iterator;
};

template<typename T = int> class v1{
    typedef std::vector<T>::iterator iterator;
};

最佳答案

std::vector<T>::iteratordependent name , 所以你需要一个 typename这里指定它指的是一个类型。否则它被假定为引用一个非类型:

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

关于C++ 模板 std::vector::iterator 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934311/

相关文章:

c++ - 我应该手动删除智能指针吗?

c++ - 不同的编译器,不同的语法

C++ SQL Server 连接,然后以特定方式读取表

python - 使用 lambdify 将涉及向量转置的表达式转换为数值函数

c++ - 我可以基于深度优先顺序而不是宽度优先顺序为完整的树提供类似堆的连续布局吗?

c++ - 将具有 const 成员的对象复制到非 const 对象

templates - 如何用 hamlet 打印逗号分隔的列表?

c++ - 一个接口(interface)可以只指定方法名,而不指定返回类型吗?

c++ - 模板的模板推导失败(中间有继承),有更好的方法吗?

java - android.view.InflateException : Binary XML file line #27: Error inflating class android. 部件.ToggleButton