简体   繁体   中英

“expected type-specifier” error in g++

I have a DD class

template<typename T>
class DD
: public IEnumerable<T>
{
    typedef IEnumerable<T> Super;
    typedef std::set<T*> Container;

And a method

template<typename T>
bool DD<T>::Enumerator::Move()
{
    if(!mIt.get()) 
       mIt.reset(
          new Container::iterator( <-----
            mContainer.GetContainer().begin()
          )
       );
       ... 
}

When I compile the class, I got error: expected type-specifier . What's wrong with the Container::iterator() ?

Try:

new typename Container::iterator

When you are in a C++ template, the compiler doesn't know whether Container::iterator is a type or something else. So you need to explicitly say that its a type.

On another note, creating an iterator with new is almost certainly wrong.

new typename Container::iterator( 
//  ^^^^^^^^

Without the typename , C++ will assume X::Y is a member (value/function) when X is in a template. You need the typename to force the compiler to interpret X::Y as a type.

Make that

new typename Container::iterator(

For a thorough explanation, see this FAQ .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM