2

在我的头文件中,我有

    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 地图,但我遇到了同样的错误。

4

2 回答 2

4

由于您operator>>是 的朋友MainClass,因此它不与 的特定实例相关联MainClass(即,它不接收this指针)。

因此,当您尝试执行以下操作时:

map.insert(myMap::value_type(name, sample) );

编译器不知道map您要引用哪个实例的成员。显然,在这种情况下,您的意思是:

mainc.map.insert(myMap::value_type(name, sample));

...因为mainc是您收到的引用的实例,MainClass作为您读取的数据的目的地。

于 2012-06-10T06:38:35.657 回答
0

首先,您必须决定您的操作员>> 做什么以及它使用什么“地图”成员实例。

于 2012-06-10T06:32:43.910 回答