我定义了一个结构,使用unsigned long long int作为在地图中存储结构的键。 我有另一个函数,它在地图中查找结构并对结构进行一些修改。
但是我得到了这样的错误:
‘struct std::_Rb_tree_iterator<std::pair<const long long unsigned int, sStatics> >’ has no member named Latency
任何人都可以告诉我错误来自哪里? 以下是我的代码结构:
A.H:
#include <map>
struct sStatics;
extern std::map<unsigned long long int, sStatics> wsmStaticsMap;
A.cpp:
#include <map>
std::map<unsigned long long int, sStatics> wsmStaticsMap;
struct sStatics
{
std::string atcs;
uint32_t Latency;
std::vector<unsigned long int> lostWSM;
unsigned long int wrongOrderCount;
};
static void function_statics(){
std::map<unsigned long long int,sStatics>::iterator it;
it = wsmStaticsMap.find(atcs);
if (it != wsmStaticsMap.end()){
it->Latency++;
}
}
答案 0 :(得分:1)
你必须写(it->second).Latency
。它返回一个键值对。您需要先选择值,然后选择其中的属性。
您可以查看reference
答案 1 :(得分:0)
std::map::find
返回
使用等效于键的键的元素的迭代器。如果没有找到这样的元素,则返回past-the-end(参见end())迭代器。
这是std::pair<Key, Value>
,您需要使用->second
来访问该值。
更改
it->Latency++;
到
(it->second).Latency++;
另外,使用auto
来简化
auto it = wsmStaticsMap.find(atcs);