我有一个DD类
template<typename T>
class DD
: public IEnumerable<T>
{
typedef IEnumerable<T> Super;
typedef std::set<T*> Container;
一种方法
template<typename T>
bool DD<T>::Enumerator::Move()
{
if(!mIt.get())
mIt.reset(
new Container::iterator( <-----
mContainer.GetContainer().begin()
)
);
...
}
当我编译课程时,我得到了error: expected type-specifier
。
Container::iterator()
有什么问题?
答案 0 :(得分:12)
尝试:
new typename Container::iterator
当您使用C ++模板时,编译器不知道Container :: iterator是一个类型还是其他东西。所以你需要明确地说它是一个类型。
另一方面,使用new创建迭代器几乎肯定是错误的。
答案 1 :(得分:2)
new typename Container::iterator(
// ^^^^^^^^
如果没有typename
,当X在模板中时,C ++会假设X::Y
是成员(值/函数)。您需要typename
强制编译器将X::Y
解释为类型。
答案 2 :(得分:2)