免责声明:我是 C++ 的新手(一名学生),这是为了评估计算机实践,所以请不要给我答案。如果您能“指导”我找到答案,以帮助我理解,那将不胜感激。
所以,我有一张 map :
std::map<std::string,MyClass> mymap;
我有一个迭代器遍历这张 map 并做一些事情(我写的):
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
,但同样,没有任何乐趣。
我真的碰壁了如何解决这个问题.. 非常感谢任何帮助。
谢谢。
最佳答案
首先,您需要 map 元素的引用,而不是拷贝:
for (auto & m : mymap)
^
然后使用&
(address of)运算符获取指向其值的指针:
retVal = &m.second;
^
请注意,这是在分配指针 (retVal
),而不是它指向的对象 (*retVal
)。分配对象是错误的,因为它没有指向有效的对象。
关于指向 map->second 的 C++ 指针不指向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747650/