我尝试在我的班级中使用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 []。我该怎么办?
答案 0 :(得分:1)
括号运算符在地图上,而不在地图的指针上......
尝试:return(* mpMyMap)[name];
答案 1 :(得分:1)
mpMyMap
是一个指针(我没有理由看到它),所以你需要取消引用它:
return (*mpMyMap)[name];
如果mpMyMap
必须是动态分配的,请记住在析构函数中delete
,并阻止复制MyClass
或实现复制构造函数和赋值运算符。
注意Get()
缺少返回类型(应该是MyType
或MyType&
)。将参数设为Get()
const std::wstring&
以避免不必要的复制,const
,Get()
不会修改它。
答案 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);
}
并且应该有返回类型。