g ++中的“期望的类型说明符”错误

时间:2011-03-09 18:37:44

标签: c++ g++

我有一个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-specifierContainer::iterator()有什么问题?

3 个答案:

答案 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)

制作

new typename Container::iterator(

有关详细说明,请参阅this FAQ