0

Visual Studio 2012 を使用すると、次のようにコンパイルされます。

void Stuff()
{
  CMap <int, int, int, int > myMap;
}

しかし、このような CMap を返そうとすると、次のようになります。

CMap<int, int, int, int> GetEncodingMap()
{
  CMap <int, int, int, int> encodingMap;
  return encodingMap;
}

次のコンパイル エラーが発生します。

1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afx.h(559) : see declaration of 'CObject::CObject'
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afx.h(534) : see declaration of 'CObject'
1>          This diagnostic occurred in the compiler generated function 'CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>::CMap(const CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> &)'
1>          with
1>          [
1>              KEY=int,
1>              ARG_KEY=int,
1>              VALUE=int,
1>              ARG_VALUE=int
1>          ]

これは、CMap で使用する型に関係なく、常に当てはまるようです。

誰かが彼が何をしているのかを理解するのを手伝ってくれませんか? 関数から CMap を返すことは可能ですか?

4

3 に答える 3

2

CMapCObjectプライベート コピー コンストラクターを継承するため、コピー不可のオブジェクトです。コピー可能にしたい場合は、CMap から継承して独自のものを提供する必要がありますが、それがどれほど実行可能かはわかりません。

于 2013-08-06T14:08:23.573 に答える
0

これは、CMap オブジェクトのコピーを防止しようとする MFC の複雑な方法です。CMap オブジェクトをコピーすることはできません。

于 2013-08-06T14:07:51.483 に答える