我正在尝试重载下标运算符以便使用它 填写地图类中使用的模板。
这是模板结构
template<typename K, typename V>
struct Node
{
V Value;
K Key;
};
在本课程中使用
地图类
template<typename K, typename V>
class myMap
{
public:
myMap();
~myMap();
V& operator[] (const K Key);
private:
const int mInitalNumNodes = 10; //Start length of the map
int mNumOfNodes; //Count of the number of Nodes in the map
int mCurrentPostion;
Node<K,V> mNodeList[10];
};
我想重载下标运算符,以便我可以通过此函数调用将一个Key和一个值放入mNodeList。
分类和操作员调用
myMap<char, int> x;
x[1] = 2;
如果我在过载实施中遇到错误,你可以指出我正确的方向。
运营商超载
template<typename K, typename V>
inline V& myMap<K, V>::operator[](const K Key)
{
// TODO: insert return statement here
Node<K, V> newNode;
newNode.Key = Key;
mNodeList[mCurrentPostion] = newNode;
mCurrentPostion++;
return mNodeList[&mCurrentPostion-1];
}
错误:
不允许非法索引
初始化无法从初始化程序转换为节点
答案 0 :(得分:1)
你的回归是错误的。你最想要的是
return mNodeList[mCurrentPostion - 1].Value;
而不是
return mNodeList[&mCurrentPostion-1];
<强> MCVE:强>
template<typename K, typename V>
struct Node
{
K Key;
V Value;
};
template<typename K, typename V>
class myMap
{
public:
myMap()
:mCurrentPostion(0)
,mNumOfNodes(0)
{}
~myMap() {}
V& operator[] (const K Key);
private:
const int mInitalNumNodes = 10; //Start length of the map
int mNumOfNodes; //Count of the number of Nodes in the map
int mCurrentPostion;
Node<K, V> mNodeList[10];
};
template<typename K, typename V>
inline V& myMap<K, V>::operator[](const K Key)
{
// TODO: insert return statement here if Key already exists
Node<K, V> newNode;
newNode.Key = Key;
mNodeList[mCurrentPostion] = newNode;
mCurrentPostion++;
return mNodeList[mCurrentPostion - 1].Value;
}
int main()
{
myMap<char, int> x;
x[1] = 2;
}