指向 map->second 的 C++ 指针不指向

标签 c++ pointers c++11

免责声明:我是 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/

相关文章:

c - 将结构体数组作为指针传递给函数 (C)

c - C 中 fwrite 和 struct 的奇怪错误

c++ - 如何在 C++11 的迭代器中获取有关 auto 标识符的更多详细信息

c - 在 C 中实现双堆栈以在命令行上计算数学表达式。(段错误)

c++ - 为什么我的角落小部件没有显示在 QTabWidget 中?

c# - PInvoke:在 C++ 中分配内存并在 C# 中释放它

c++ - 多线程策略? (通过Editor在多线程引擎中修改场景)

c++ - 如何在 C++11 中使用 <regex>

c++ - 正确使用std智能指针保证ptr安全的方法

c++ - std::string::erase 如何从字符串中删除字符?