deleyd
asked on
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/cs36 1/web/webs ite/Lectur es/iterato rs/pages/c ppiterator .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:
};
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?
ASKER
added #include <iterator> it still complains same complaint.
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>.
ASKER
OK I started a new C++ window forms project, added a blank class Author, and a class Book.
(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?)
#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;
};
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?)
You will either have to add
(not recommended in a header file, though) or refer to these identifiers as 'std::iterator' etc.
using namespace std;
(not recommended in a header file, though) or refer to these identifiers as 'std::iterator' etc.
ASKER
I changed line 27 to read
typedef AuthorIterator std::iterator;
and it complains:
error C2955: 'std::iterator' : use of class template requires template argument list
here your typedef seems wrong.
It should be:
typedef std::iterator AuthorIterator ;
It should be:
typedef std::iterator AuthorIterator ;
ASKER
Ok I switched it around to read:
typedef std::iterator AuthorIterator;
and now it complains
error C2955: 'std::iterator' : use of class template requires template argument list
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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?
What would I use if I wanted an iterator for a collection of MyClass classes?
Yes, you are most likely to need to add
Open in new window
You could as well try to only use 'xutility' (which introduces it), but that way it's IMHO safer.