今天在写一个简单的函数时,编译时出现了如下的错误:
这个很简单的函数是这样的:
- struct bundle_set
- {
- uint32_t baseId;
- uint32_t endId;
- bool operator< (const bundle_set &a)
- {
- return baseId < a.baseId;
- }
- };
在网上搜索到都是说什么 “一个const对象不能调用非const成员函数” 并不太理解是什么意思。以前看书的时候,书上说是如果在函数后面加上 const 表明这个函数不会去修改类成员,光从这个函数来看确实没有修改成员,但为何需要声明为 const 才能编译过呢?这个还没理解,以后知道了才更新吧。然后我们再看下面这个函数:
-
- void idm_bundle_manager::dumpByLdpIdx(uint32_t ldpIdx)const
- {
- if(!mLdpIdmMap.empty())
- {
- printf("ldpidx = %u\n", ldpIdx);
- auto set = mLdpIdmMap[ldpIdx];
- auto ret = mLdpIdmMap.find(ldpIdx);
- if(ret != mLdpIdmMap.end())
- {
- for(auto ite : ret->second)
- {
- printf("%u %u\n", ite.baseId, ite.endId);
- }
- }
- }
- }
编译错误应该跟开头那个是一样的意思。错误表明在224行,即 auto set = mLdpIdmMap[ldpIdx]; 这个 mLdpIdmMap 的类型为 std::map