免责声明:我是C ++(学生)的新手,这是用于计算机实践的评估,所以请不要给我答案。如果你可以“引导”我的答案,以帮助我理解,那将非常感激。
所以,我有一张地图:
std::map<std::string,MyClass> mymap;
我有一个迭代器遍历这个地图并完成了(我写的):
MyClass *retVal;
for (auto m : mymap)
{
if (m.count() == 0)
*retVal = m.second;
}
return *retVal;
我不能只返回m.second
所以我需要弄清楚如何让* retVal指向m.second的引用,而不是值。
我以为我拥有它,但是调试器说不然。
我尝试添加&m.second
,但编译器不喜欢这样。
我甚至尝试过
for(<std::map<std::string,MyClass>::iterator myIter = mymap.begin(); myIter != tasks.cend(); ++myIter)
将所有.second
更改为->second
,但又一次,没有快乐。
我真的打砖墙怎么解决这个问题..任何帮助都非常感谢。
感谢。
答案 0 :(得分:2)
首先,您需要一个引用而不是副本到map元素:
for (auto & m : mymap)
^
然后使用&
(地址)运算符获取指向其值的指针:
retVal = &m.second;
^
请注意,这是指定指针(retVal
),而不是指向它的对象(*retVal
)。分配对象是错误的,因为它没有指向有效的对象。