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マップをmyMapmapaに変更しようとしましたが、同じエラーが発生します。

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 に答える