-1

クラスのプロパティとして std::map を使用しようとしています。私は Visual Studio 2012 を使用しており、私のクラスは次のようになっています。

public ref class MyClass
{
    std::map<std::wstring,MyType> * mpMyMap;
    MyClass()
{
mpMyMap = new std::map<std::wstring,MyType>();
}
~MyClass()
{
delete mpMyMap;
}
Get(std::wstring name)
{
    return mpMyMap[name];
} 
}

リターン時 mpMyMap[name]; この型には operator[] がありません。私は何をすべきか?

4

5 に答える 5

1

ブラケット演算子は、マップのポインターではなく、マップ上にあります...

試してください: return (*mpMyMap)[name];

于 2012-08-14T14:04:48.603 に答える
1

mpMyMapはポインターなので (理由がわかりません)、逆参照する必要があります。

return (*mpMyMap)[name];

mpMyMapデストラクタで動的に割り当てられる必要がある場合はdelete、コピーを防止するか、MyClassコピー コンストラクタと代入演算子を実装します。

NoteGet()に戻り値の型がありません (または のいずれかである必要がありますMyType) MyType&。不必要なコピーを避けるためにGet()aへの引数を作成し、 asはそれを変更しません。const std::wstring&constGet()

于 2012-08-14T14:05:04.807 に答える
1

正しい構文は次のとおりです。

MyType Get(std::wstring name)
{
    return (*mpMyMap)[name];
} 

マップをポインターではなくインスタンスメンバーにすることもできます

std::map<std::wstring,MyType> mMyMap;

の元のコードGetが機能し、のコンストラクタとデストラクタでメモリ管理を取り除くことができますMyClass

于 2012-08-14T14:05:08.377 に答える
1

使用する

return (*mpMyMap)[name];

また

return mpMyMap->operator[]( name );

PSこれは何ですか

  public ref class MyClass
//^^^^^^^^^^

Getまた、 (MyTypeあなたの場合)の戻り値の型を追加します

于 2012-08-14T14:05:21.427 に答える
1

mpMyMapポインターであるため、最初のバリアントは

Get(std::wstring name)
{
    return (*mpMyMap)[name];
}

そして第二に

Get(std::wstring name)
{
    return mpMyMap->operator[](name);
}

Get には return-type が必要です。

于 2012-08-14T14:06:08.920 に答える