在我的头文件中,我有

    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,但是遇到相同的错误。

最佳答案

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

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

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

编译器不知道您要引用哪个实例的map成员。显然,在这种情况下,您的意思是:
mainc.map.insert(myMap::value_type(name, sample));

...因为maincMainClass的实例,您收到的引用作为您读取数据的目标。

关于c++ - 无效使用非静态数据成员(typedef映射),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10966777/

10-16 04:52