Объявленный картой вначале:
map<char*,char*> rtable; // used to store routing information
Теперь я пытаюсь отобразить содержание карты:
void Routes::viewroutes(){
typedef map<char*, char*>::const_iterator iter;
for (iter=rtable.begin(); iter != rtable.end(); ++iter) {
cout << iter->second << " " << iter->first << endl;
}
}
Получение ошибки "ожидало первичное выражение прежде'! =' маркер и для '->' маркер. Может казаться, не понимает ошибки, которую я совершаю здесь. Какие-либо идеи?
iter
- это тип в вашем коде. Должен быть переменной.
typedef map<char*,char*> my_map_t; // alias for a specialized map
// declare a variable of needed type
my_map_t rtable;
// declare iter of type my_map_t::const_iterator
for (my_map_t::const_iterator iter=rtable.begin(); iter != rtable.end(); ++iter) {
cout << iter->second << " " << iter->first << endl;
}
// scope of the iter variable will be limited to the loop above
Удалите typedef. Вы не объявляете переменную с помощью этого оператора, вы определяете тип, а затем назначаете ему. Вот в чем ошибка.
Объявите переменную типа iter
:
void Routes::viewroutes(){
typedef map<char*, char*>::const_iterator iter;
for (iter i =rtable.begin(); i != rtable.end(); ++i) {
cout << i->second << " " << i->first << endl;
}
}
Просто для удовольствия :), вы можете использовать следующие функции, которые я написал для потоковой передачи содержимого карты или мульти-карты в любой стандартный поток, будь то стандартный вывод, файловый поток. Он работает со всеми типами потоков, такими как cout или wcout, например:
template <class Container, class Stream>
Stream& printPairValueContainer(Stream& outputstream, const Container& container)
{
typename Container::const_iterator beg = container.begin();
outputstream << "[";
while(beg != container.end())
{
outputstream << " " << "<" << beg->first << " , " << beg->second << ">";
beg++;
}
outputstream << " ]";
return outputstream;
}
template
< class Key, class Value
, template<class KeyType, class ValueType, class Traits = std::less<KeyType>,
class Allocator = std::allocator<std::pair<const KeyType, ValueType> > >
class Container
, class Stream
>
Stream& operator<<(Stream& outputstream, const Container<Key, Value>& container)
{
return printPairValueContainer(outputstream, container);
}
Я всегда обращаюсь к итераторам моей карты так (*iter).first и (*iter).second.