我有以下代码:
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?
答案 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"];