在模板类中使用std容器迭代器

时间:2016-01-08 11:37:31

标签: c++ class templates iterator

我不能在模板类中使用std容器迭代器。

我得到了这个错误:
错误C2061:语法错误:标识符'iterator'
错误C2238:';'

之前的意外令牌

这里是源代码:

#include <list>
#include <functional>
#include <memory>

template<typename TParam>
class MyClass
{
public:
    using TFunction = std::function<void(TParam)>;
    using TContainer = std::list<TFunction>;
    using TIterator = TContainer::iterator; // compilation error here!
};

如何在模板化类中使用容器的迭代器?

1 个答案:

答案 0 :(得分:1)

您需要 typename 关键字

using TIterator = typename TContainer::iterator; 

根据TContainer的最终结果,迭代器可以是静态成员或嵌套类型。除非使用typename关键字明确指定,否则编译器将假定它不是类型。有关详细信息,请参阅here