使用模板类重载[]运算符的问题

Ash*_*h M 5 c++ templates overloading operator-keyword

我在使用c ++中的模板类重载下标运算符时遇到问题.我有一个自定义的地图类实现,我需要能够通过密钥访问元素.

template <typename K, typename DT>
DT& myMap<K, DT>::operator[](K key)
{
  for (int i = 0; i<size; i++)
 {
    if (elements[i].key == key){
        return elements[i].data;
    }
 } 
}
Run Code Online (Sandbox Code Playgroud)

我现在是怎么试图让操作员超负荷的.编译器不接受K键来搜索数据.K是密钥的数据类型.它存储在myMap类包含在数组中的单独类中.

因此,如果在主要我尝试做:

myMap<string, int> * test = new myMap < string, int > ;
test["car"] = 50;
Run Code Online (Sandbox Code Playgroud)

它说:

Error expression must have an integral or unscoped enum type
Run Code Online (Sandbox Code Playgroud)

我不太确定问题是什么.

jro*_*rok 5

test是一个指针MyMap,而不是一个对象,所以test["car"]调用内置的解引用运算符,而不是你的重载.

你需要(*test)["car"]test->operator[]("car")让它发挥作用.