-1

i try to use std::map as property in my class. I use Visual Studio 2012, and my class is like:

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];
} 
}

At return mpMyMap[name]; I get error, what there is no operator[] for this type. What should I do?

4

5 回答 5

1

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

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

于 2012-08-14T14:04:48.603 回答
1

mpMyMap是一个指针(我看不出有什么原因),所以你需要取消引用它:

return (*mpMyMap)[name];

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

注意Get()缺少返回类型(应该是MyTypeor MyType&)。将参数设置为Get()aconst std::wstring&以避免不必要的复制,并且constasGet()不会修改它。

于 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 应该有返回类型。

于 2012-08-14T14:06:08.920 回答