无效使用非静态数据成员(typedef map)

时间:2012-06-10 06:25:19

标签: c++ typedef

在我的标题文件中,我有

    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,但我收到同样的错误。

2 个答案:

答案 0 :(得分:4)

由于您的operator>>MainClass的朋友,因此它与MainClass的特定实例无关(即,它没有收到this指针)。

因此,当您尝试:

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

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

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

...因为maincMainClass的实例,您的参考作为您所阅读数据的目的地。

答案 1 :(得分:0)

首先,你必须决定你的运营商&gt;&gt;是什么以及它使用的“地图”memeber的实例。