我试图通过引用在hash_map内获取对象。看起来很简单,但是我不知道为什么它不能编译。错误为no match for operator=
。在我看来,我正在将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");
答案 0 :(得分:3)
阅读约翰回答中的评论后,我认为我理解您的问题。按指针调用也按值调用。您复制指针地址。您可以通过引用指针来调用:
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
的地址(值)。
答案 1 :(得分:1)
您对指针感到困惑。
*fooptr = it->second;
Foo foo;
GetFoo(&foo, "test");
声明一个对象,将指针传递给该对象,然后在函数内部取消引用该指针。
编辑
根据下面的反馈,答案应该是
*fooptr = &it->second;
Foo* foo = 0;
GetFoo(&foo, "test");
声明指针,将指向该指针的指针传递给函数(双指针),取消引用双指针(以获取指针),并将该指针分配给map元素。
此代码太可怕了。
-2什么都不是,我不会担心。