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.
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.