【发布时间】:2016-06-11 11:00:48
【问题描述】:
我正在实现一种方法,该方法通过关联数组中的名称搜索Object 类型的对象。然后使用类Object 中定义的方法display 显示其元素。该方法是这样实现的:
//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?
【问题讨论】:
-
在迭代器上使用 both
->和*会尝试将您降低两个级别。根据编译器,一个太多了。
标签: c++ dictionary iterator associative-array