[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

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

Posted on 2013-12-22
10
Medium Priority
?
2,605 Views
Last Modified: 2014-01-30
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?
0
Comment
Question by:deleyd
  • 5
  • 3
  • 2
10 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 39735195
>>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.
0
 

Author Comment

by:deleyd
ID: 39735226
added #include <iterator> it still complains same complaint.
0
 
LVL 86

Expert Comment

by:jkr
ID: 39735234
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>.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:deleyd
ID: 39735250
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?)
0
 
LVL 86

Expert Comment

by:jkr
ID: 39736309
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.
0
 

Author Comment

by:deleyd
ID: 39736773
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
0
 
LVL 9

Expert Comment

by:Subrat (C++ windows/Linux)
ID: 39736944
here your typedef seems wrong.
It should be:    
typedef std::iterator AuthorIterator ;
0
 

Author Comment

by:deleyd
ID: 39738288
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
0
 
LVL 9

Accepted Solution

by:
Subrat (C++ windows/Linux) earned 2000 total points
ID: 39741086
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.
0
 

Author Comment

by:deleyd
ID: 39742910
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?
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
Suggested Courses

873 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question