operator []重载以接受char *作为下标

时间:2015-06-24 12:26:38

标签: c++ operator-overloading

我有以下代码:

class IList{
public:
    virtual const Pair *get(const char *key) const = 0;

    inline const Pair *operator[](const char *key) const;
};

inline const Pair *IROList::operator[](const char *key) const{
    return get(key);
}

代码编译好,但是当我尝试使用它时:

IList *list = (IList *) SomeFactory();
Pair *p;
p = list["3 city"];

我得到了:

test_list.cc:47:19: error: invalid types ‘IList*[const char [7]]’ for array subscript
  p = list["3 city"];
                   ^

我可以理解数组下标是int或char, 但那么std :: map如何做char * / strings?

2 个答案:

答案 0 :(得分:6)

如果您的X也是一个指针,那么就不能像您一样使用list运算符。这是因为[]相当于list["3 city"]。如果您提供指针,则必须使用list.operator[]("3 city")或 - 更具可读性 - list->operator[]("3 city")。当然,您也可以将列表作为参考并正常使用:

(*list)["3 city"]

答案 1 :(得分:3)

似乎list是指向IList对象的指针。所以你应该尝试: p =(* list)[" 3 city"];