![](/img/trans.png)
[英]Using struct as KEY and VALUE for map. find() operation giving error
[英]I get this error while using std::map. Why?
当我尝试编译以下代码时...
struct MemPages
{
size_t size;
volatile sig_atomic_t acc;
};
typedef std::map<unsigned long, MemPages> PagesMap;
PagesMap pagesMap;
............
pagesMap.insert(pair<unsigned long, MemPages>((unsigned long)addr, memPages ));
............
// This is Line 531
MemPages& mp = pagesMap[addr]; // Error here
我收到以下错误...
**replication.cpp:531: error: invalid conversion from ‘void*’ to ‘long unsigned int’
replication.cpp:531: error: initializing argument 1 of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = long unsigned int, _Tp = MemPages, _Compare = std::less<long unsigned int>, _Alloc = std::allocator<std::pair<const long unsigned int, MemPages> >]’
make: *** [all] Error 1**
任何想法,这是怎么回事?
错误提示:
从'
void*
'到'long unsigned int
'的无效转换
addr
显然是一个void*
; 地图的键类型是unsigned long
。 您需要将unsigned long
整数(或至少可以转换为整数的整数)传递给operator[]
。
在代码中强制转换为整数( (unsigned long)addr
)的指针很奇怪:确实没有任何理由这样做。 如果std::map
的键类型应为指针类型,则应将其设为指针类型...
由于要在插入中将addr
(显然是void *
,?)强制转换为unsigned long
,因此还需要在检索时强制转换。
您已经在上面的代码中的某处addr
的事实并不意味着您已更改了变量的基本数据类型以供以后使用。 强制转换仅适用于该特定用法。 无论何时需要将其视为unsigned long
,都需要再次将其unsigned long
。
pagesMap
是<unsigned long, MemPages>
的映射,您的地址类型为void*
,它的类型必须为unsigned long
尝试将addr
参数转换为地图的operator []
MemPages& mp = pagesMap[(unsigned long)addr];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.