1

很早就宣布了一张地图:

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;
    }
}

在 '!=' 标记和 '->' 标记之前收到错误“预期的主表达式。似乎无法理解我在这里犯的错误。有什么想法吗?

4

4 回答 4

4

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
于 2010-06-10T19:52:38.690 回答
1

删除 typedef。您不是用该语句声明变量,而是定义一个类型,然后分配给它。这就是错误所在。

于 2010-06-10T19:52:16.040 回答
1

声明一个类型的变量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);
}
于 2010-06-10T19:53:10.250 回答
-4

我总是像 (*iter).first 和 (*iter).second 那样访问我的地图迭代器。

于 2010-06-10T19:52:48.393 回答