首页 > 解决方案 > 时间:2019-01-01 标签:c++linkedlistlistoperator[]

问题描述

我正在尝试实现链表,但操作符 [] 有一些问题

template <class T>
T& L1List<T>::at(int i){
    L1Item<T> * pRet = this->_pHead;
    int idx = 0;
    while(pRet){
        if(i != idx){
            pRet = pRet->pNext;
            idx++;
        }else  return (pRet->data);
    }
}


template <class T>
T& L1List<T>::operator[](int i){
    return at(i);
}

当我编译它时,它使用 list->at(i) 运行,但是 list[i]. int a = 列表[i]; 错误是“无法在初始化中将 L1List'<'int> 转换为 'int'”

标签: c++operators

解决方案


如果list->at(i)有效,则意味着这list是一个指针,而不是一个对象。因此,list[i]评估为一个对象。这就是为什么int a = list[i];不起作用,这也解释了错误消息。您不能使用 aL1List<int>来初始化 类型的对象int

你需要使用:

int a = (*list)[i];

或者让它变得非常复杂并使用:

int a = list->operator[](i);

推荐阅读