下面的代码在声明迭代器的行生成语法错误:
template <typename T>
class A
{
public:
struct B
{
int x, y, z;
};
void a()
{
std::map<int, B>::const_iterator itr; // error: ; expected before itr
}
std::vector<T> v;
std::map<int, B> m;
};
仅当A是模板化类时才会发生这种情况。这段代码出了什么问题?如果我将B移出A,则代码编译得很好。
答案 0 :(得分:8)
您需要一个类型名称:
typename std::map<int, B>::const_iterator itr;
迭代器是依赖类型(取决于B),当你遇到这种情况时,编译器要求你用类型名来澄清它。
对问题here进行了合理的讨论。