我正在实现一个方法,该方法在关联数组中按名称搜索类型为Object
的对象。然后使用在类display
中定义的方法Object
显示其元素。该方法以这种方式实现:
//Method SearchObject in class Gestion
#include "object.h"
void Gestion::SearchObject(string nameobj) const{
stringstream ss;
auto it = objectname.find(nameobj);
if (it == objectname.end())
cout << "Not found!" << endl;
else
(*it)->display(ss); //Error reported in this line
cout << ss.str() << endl;
}
然而,在编译时我收到以下错误:
error: base operand of ‘->’ has non-pointer type ‘const std::pair<const std::basic_string<char>, std::shared_ptr<Object> >’
(*it)->display(ss);
方法display
在类Object
中声明,我已经通过从其他类调用它来测试。在类Gestion
的标题中,变量以这种方式声明:
//File gestion.h
typedef std::shared_ptr<Object> ObjPtr;
typedef map<string, ObjPtr> Objectmap;
class Gestion {
private:
Objectmap objectname;
public:
Gestion(Objectmap objectname);
virtual ~Gestion() {}
virtual void SearchObject(string nameobj) const;
};
如何在我正在实施的这个新方法中使用方法display
?
答案 0 :(得分:2)
迭代器是在指针之后建模的,因此您可以在它们上使用解除引用运算符*
,或者在它们上使用指针到结构访问运算符->
。
但是,指针到结构访问操作符->
已经在进行解除引用,因此您无法将两者结合使用。
要么it->display(ss)
,或 (*it).display(ss)
。
这是一个谎言,因为迭代器“指向”std::pair
,其second
成员是指针,所以 你应该使用{{1>取消引用或*
,例如->
或it->second->display(ss)
,或(*it).second->display(ss)
或(*it->second).display(ss)
。
答案 1 :(得分:1)
看起来Objmultomedia是std :: pair。您需要从对的第二个元素中调用display
:
it->second->display(ss);