c++中的映射错误

Map Error in C++

本文关键字:错误 映射 c++      更新时间:2023-10-16

我正在使用GCC 4.6编译器,当我构建我的代码(ns3)时,我得到错误:

In file included from /usr/include/c++/4.4/map:60,
                 from ../src/internet-stack/tcp-typedefs.h:23,
                 from ../src/internet-stack/mp-tcp-socket-impl.cc:16:
/usr/include/c++/4.4/bits/stl_tree.h: In member function ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(_II, _II) [with _InputIterator = unsigned int, _Key = unsigned int, _Val = std::pair<const unsigned int, unsigned int>, _KeyOfValue = std::_Select1st<std::pair<const unsigned int, unsigned int> >, _Compare = std::less<unsigned int>, _Alloc = std::allocator<std::pair<const unsigned int, unsigned int> >]’:
/usr/include/c++/4.4/bits/stl_map.h:553:   instantiated from ‘void std::map<_Key, _Tp, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _InputIterator = unsigned int, _Key = unsigned int, _Tp = unsigned int, _Compare = std::less<unsigned int>, _Alloc = std::allocator<std::pair<const unsigned int, unsigned int> >]’
../src/internet-stack/mp-tcp-socket-impl.cc:1536:   instantiated from here
/usr/include/c++/4.4/bits/stl_tree.h:1324: error: invalid type argument of ‘unary *’

这是因为我使用了map:

 map<uint32_t, uint32_t> dis;

,我像这样插入:

 dis.insert(p,t);

我想不出解决这个问题的方法。谢谢你的帮助。

我认为你没有像你应该做的那样使用插入方法。我不确定,因为我看不到你正在使用的参数的声明,但编译器说你正在使用的方法:

  void insert (InputIterator first, InputIterator last)

,因此实参可以是同一容器的迭代器。这里,第一个参数指定要复制的容器的开始位置,最后一个参数标记该范围的结束位置(不包括最后一个元素)。以下是其他选项:

pair<iterator,bool> insert (const value_type& val);

这是最常见的,我猜你想使用这个函数,它插入元素val到映射。这里val是某个类型为pair<T1,T2>的变量,其中T1和T2是创建映射时输入的参数(在这里是unsigned int, unsigned int)。可以使用std.

的make_pair(first, second)函数。
iterator insert (iterator position, const value_type& val);

最后一个与前一个类似,但它告诉映射,新元素的位置可能接近position。但这只是一个性能方面的提示,因为map是一个具有良好定义的顺序的树。

你的代码可能是dis.insert(make_pair(p,t));

问候。

您将GCC 4.4中的库与GCC 4.6一起使用-这可能是问题所在。

尝试将4.6头文件传递给编译器(如-I/usr/include/c++/4.6)