使用 std::map::const_iterator 在模板类中嵌套结构?
以下代码在声明迭代器的行生成语法错误:
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 中移出,代码可以正常编译。
The folowing code generates a syntax error at the line where the iterator is declared:
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;
};
This only happens when A is a templated class. What's wrong with this code? If I move B out of A, the code compiles fine.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你需要一个类型名:
迭代器是一个依赖类型(取决于 B),当你遇到这种情况时,编译器要求你用类型名来澄清它。
此处对该问题进行了合理的讨论。
You need a typename:
The iterator is a dependant type (depends on B) and when you have this situation the compiler requires you to clarify it with a typename.
There is a reasonable discussion of the issue here.