C++ 通过引用从地图获取对象

C++ 通过引用从地图获取对象,c++,C++,我试图通过引用获取散列映射中的对象。它看起来很简单,但我不明白它为什么不编译。该错误与运算符“”不匹配。在我看来,我将fooptr的值设置为映射中找到的Foo对象的地址 void FooManager::GetFoo(Foo *fooptr, std::string name){ std::hash_map<std::string, Foo>::iterator it = this->foos.find(name); if(it != this->foos

我试图通过引用获取散列映射中的对象。它看起来很简单,但我不明白它为什么不编译。该错误与运算符“”不匹配。在我看来,我将fooptr的值设置为映射中找到的Foo对象的地址

void FooManager::GetFoo(Foo *fooptr, std::string name){
    std::hash_map<std::string, Foo>::iterator it = this->foos.find(name);
    if(it != this->foos.end()){
       *fooptr = &it->second;
    }
}

Foo *foo = 0;
GetFoo(foo, "test");

你对指针感到困惑

*fooptr = it->second;

Foo foo;
GetFoo(&foo, "test");
声明一个对象,传递一个指向该对象的指针,取消对函数中指针的引用

编辑

根据下面的反馈,答案应该是

*fooptr = &it->second;

Foo* foo = 0;
GetFoo(&foo, "test");
声明一个指针,将指向该指针的指针传递给函数一个双指针,取消引用该双指针以获取一个指针,并为该指针指定一个指向map元素的指针

这个密码太可怕了


-2没什么,我不担心。

读了约翰回答中的评论后,我想我理解你的问题。指针调用也是值调用。复制指针地址。您可以通过引用指针来调用:

void FooManager::GetFoo(Foo *&fooptr, std::string name){
    std::hash_map<std::string, Foo>::iterator it = this->foos.find(name);
    if(it != this->foos.end()){
       fooptr = &it->second;
    }
}

Foo *foo = 0;
GetFoo(foo, "test");

现在fooptr是指针的引用。当您更改fooptr的地址值时,您也会更改foo的地址值。

如果fooptr的类型是foo*,问问自己*fooptr的类型是什么。没有std::hash\u映射。@Brian我有。@peer\u 2\u peer\u 2您使用的是什么标准库?似乎确实存在。我觉得我已经尝试过了,这是我最初的路线。它起作用了,但它似乎并没有获得实际的对象——更像是获得了它的副本。我会再试一次。@peer_2_peer_2当然是在获取副本。听起来你需要一个双指针。我想我就是不明白?我有一个物体住在地图里面。该对象有一个地址。那么,为什么声明一个指针,然后将其传递给函数,然后将该指针的值设置为对象的地址,不起作用呢?要使用Foo*FooManager::GetFoostd::string name必须更实用,才能获得指向,当然,如果找不到指针,则返回nullptr,因为函数中的指针只是函数外部指针的副本。如果要更改指针,需要将指针传递给指针,就像要更改整数需要将指针传递给整数一样。推荐信也行,也行。我想我只需要把地址本身还给你。如果我错了,请纠正我。。。不应该是fooptr=&it->second;没有明星?