error C2146: syntax error : missing ';' before identifier 'value_type'

I'm trying to work on the C++ iterator example at https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/iterators/pages/cppiterator.html
#pragma once
class iterator
{
public:
  typedef std::forward_iterator_tag iterator_category;
  typedef T                          value_type;
  typedef ptrdiff_t                  difference_type;
  typedef T*                         pointer;
  typedef T&                         reference;

  iterator();

  // Get the data element at this position
  reference operator*() const;
  pointer operator->() const;

  // Move position forward 1 place
  iterator& operator++();
  iterator operator++(int);

  // Comparison operators
  bool operator== (const iterator&) const;
  bool operator!= (const iterator&) const;
private:
  
};

Open in new window

I get the compile error complaining about line 6:
error C2146: syntax error : missing ';' before identifier 'value_type'
Is there an #include I need to add to make this work?
deleydSoftware EngineerAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
>>Is there an #include I need to add to make this work?

Yes, you are most likely to need to add

#include <iterator>

Open in new window


You could as well try to only use 'xutility' (which introduces it), but that way it's IMHO safer.
deleydSoftware EngineerAuthor Commented:
added #include <iterator> it still complains same complaint.
jkrCommented:
Sorry for not noting that right away, but that source snippet is pseudocode and is just meant to illustrate the concept. Just look at the lines 15 and 19, neither 'reference' nor 'pointer' are valid keywords in C++. You will find the actual implementation in <iterator>.
Announcing the Winners!

The results are in for the 15th Annual Expert Awards! Congratulations to the winners, and thank you to everyone who participated in the nominations. We are so grateful for the valuable contributions experts make on a daily basis. Click to read more about this year’s recipients!

deleydSoftware EngineerAuthor Commented:
OK I started a new C++ window forms project, added a blank class Author, and a class Book.
#pragma once
#include <string>
#include "Author.h"
#include <iterator>

class Book
{
  struct AuthorListNode {
     Author data;
     AuthorListNode* next;
  };
public:
  
  Book (std::string theTitle,
        Author theAuthor, 
        std::string theIdentifier);

  Book (std::string theTitle, int numberOfAuthors,
        Author* theAuthors, std::string theIdentifier);

  Book (const Book& b);

  ~Book();
  
  Book& operator= (const Book&);

  typedef AuthorIterator iterator;
  typedef ConstAuthorIterator const_iterator;

  std::string getTitle() const        {return title;}
  void putTitle(std::string theTitle) {title = theTitle;}

  int getNumberOfAuthors() const {return numAuthors;}

  void addAuthor (Author);
  void removeAuthor (Author);

  std::string getIdentifier() const   {return identifier;}
  void putIdentifier(std::string id)  {identifier = id;}


  iterator begin();
  const_iterator begin() const;

  iterator end();
  const_iterator end() const;
  
  iterator findAuthor (Name n);
  const_iterator findAuthor (Name n) const;

private:
  std::string title;
  int numAuthors;

  AuthorListNode* authors;  // linked list of pointers to authors
  std::string identifier;
  friend class AuthorIterator;
  friend class ConstAuthorIterator;
};

Open in new window

It now complains about line 27:
Book.h(27): error C2146: syntax error : missing ';' before identifier 'iterator'
Also complains about lines 28, 42, 43, 45, 46, 48, 49.

(Also complains lines 48,49 about Name. Is there supposed to be a class named Name? I would think that would just be a string? Does it really need its own class? Or is there some sort of TypeDef thing I'm missing?)
jkrCommented:
You will either have to add

using namespace std;

Open in new window


(not recommended in a header file, though) or refer to these identifiers as 'std::iterator' etc.
deleydSoftware EngineerAuthor Commented:
I changed line 27 to read
 typedef AuthorIterator std::iterator;

Open in new window

and it complains:
error C2955: 'std::iterator' : use of class template requires template argument list
Subrat (C++ windows/Linux)Software EngineerCommented:
here your typedef seems wrong.
It should be:    
typedef std::iterator AuthorIterator ;
deleydSoftware EngineerAuthor Commented:
Ok I switched it around to read:
typedef std::iterator AuthorIterator;

Open in new window

and now it complains
error C2955: 'std::iterator' : use of class template requires template argument list
Subrat (C++ windows/Linux)Software EngineerCommented:
Generally typedef is used to define a type.For a longer syntax we prefer doing typedef.
Ex: if I want unsigned long int to be used as ULINT then my declaration should be as follows.

typedef unsigned long int ULINT;

For iterator, we need to define the type of container upon which it'll work.
Lets we have a vector of ints. I want to traverse using iterator, So I can do declaration of iterator as follows.

typedef std::vector<int>::iterator vitrInt.

But in your case what exactly u want, I don't know.

If possible, share the entire source code.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
deleydSoftware EngineerAuthor Commented:
Well I was trying to go through what looks like a lecture posted by a university professor, but I can't get his code to compile. Thus I'm not sure what he's doing.

What would I use if I wanted an iterator for a collection of MyClass classes?
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.