在我的标题文件中,我有
typedef map <string, MyClass*> myMap;
class MainClass {
myMap map;
public:
friend istream& operator>> (istream &is, MainClass &mainc) {
string name = "Geo";
MyClass* sample = new MyClass();
map.insert(myMap::value_type(name, sample) );
return is; }
};
在编译期间,我得到:
line 4: error: invalid use of non-static data member 'MainClass::map'
line 9: error: from this location
我已经尝试将myMap地图更改为myMap mapa,但我收到同样的错误。
答案 0 :(得分:4)
由于您的operator>>
是MainClass
的朋友,因此它与MainClass
的特定实例无关(即,它没有收到this
指针)。
因此,当您尝试:
map.insert(myMap::value_type(name, sample) );
编译器不知道您要引用的实例map
成员。显然,在这种情况下,您的意思是:
mainc.map.insert(myMap::value_type(name, sample));
...因为mainc
是MainClass
的实例,您的参考作为您所阅读数据的目的地。
答案 1 :(得分:0)
首先,你必须决定你的运营商&gt;&gt;是什么以及它使用的“地图”memeber的实例。