模板化类中的嵌套结构与std :: map :: const_iterator?

时间:2009-03-19 08:54:24

标签: c++ templates nested stdmap

下面的代码在声明迭代器的行生成语法错误:

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,则代码编译得很好。

1 个答案:

答案 0 :(得分:8)

您需要一个类型名称:

 typename std::map<int, B>::const_iterator itr;

迭代器是依赖类型(取决于B),当你遇到这种情况时,编译器要求你用类型名来澄清它。

对问题here进行了合理的讨论。