使用带指针的std :: map

时间:2012-08-14 14:02:58

标签: pointers stl c++-cli clr

我尝试在我的班级中使用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 []。我该怎么办?

5 个答案:

答案 0 :(得分:1)

括号运算符在地图上,而不在地图的指针上......

尝试:return(* mpMyMap)[name];

答案 1 :(得分:1)

mpMyMap是一个指针(我没有理由看到它),所以你需要取消引用它:

return (*mpMyMap)[name];

如果mpMyMap必须是动态分配的,请记住在析构函数中delete,并阻止复制MyClass或实现复制构造函数和赋值运算符。

注意Get()缺少返回类型(应该是MyTypeMyType&)。将参数设为Get() const std::wstring&以避免不必要的复制,constGet()不会修改它。

答案 2 :(得分:1)

正确的语法是

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

您还可以使地图成为实例成员而不是指针

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

那么Get中的原始代码就可以了,你可以在MyClass的构造函数和析构函数中删除内存管理。

答案 3 :(得分:1)

使用

return (*mpMyMap)[name];

return mpMyMap->operator[]( name );

P.S。这是什么

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

另外,为Get添加返回类型(在您的情况下为MyType

答案 4 :(得分:1)

由于mpMyMap是指针,因此第一个变体是

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

第二次

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

并且应该有返回类型。