【发布时间】:2014-01-22 22:23:14
【问题描述】:
在 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;
};
【问题讨论】:
-
clang++ 已知有相当不错的错误消息,尤其是对于这类错误。在这种情况下,它会在依赖类型名称 'std::vector
::iterator' 之前显示 error: missing 'typename'。如果您无法理解来自其他编译器的错误消息,我建议您尝试 clang(例如在在线编译器中)。 -
@DyP GCC 有类似的错误信息。
-
@Rapptz 哦,确实有这个例子:) 这真是一个惊喜。前段时间我最终从 g++ 切换到了 clang++,因为错误消息变得不可读,尽管对于更复杂的情况。
标签: c++ templates vector iterator