在我的头文件中,我有
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));
...因为
mainc
是MainClass
的实例,您收到的引用作为您读取数据的目标。关于c++ - 无效使用非静态数据成员(typedef映射),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10966777/