Я не программист на C ++, поэтому, учитывая эту функцию (вы можете ее распознать), допустимо ли возвращать false, когда возвращаемый тип объявлен как ListNode *?
Компилятор жалуется, но ищет для решения кажется, что IDE получает вину. Я просто хочу понять, разрешено ли это, и поэтому IDE виновата, или это ошибка.
Если это помогает, это код Arduino, и я использую IDE версии 1.8.11.
template<typename T>
ListNode<T>* LinkedList<T>::getNode(int index) {
int _pos = 0;
ListNode<T>* current = root;
// Check if the node trying to get is
// immediatly AFTER the previous got one
if(isCached && lastIndexGot <= index) {
_pos = lastIndexGot;
current = lastNodeGot;
}
while(_pos < index && current) {
current = current->next;
_pos++;
}
// Check if the object index got is the same as the required
if(_pos == index) {
isCached = true;
lastIndexGot = index;
lastNodeGot = current;
return current;
}
return false;
}
отчеты компилятора:
cannot convert bool the ListNode<Device*>*
Вот пример, где эта функция вызывается;
template<typename T>
bool LinkedList<T>::add(int index, T _t) {
if(index >= _size)
return add(_t);
if(index == 0)
return unshift(_t);
ListNode<T> *tmp = new ListNode<T>(),
*_prev = getNode(index-1);
tmp->data = _t;
tmp->next = _prev->next;
_prev->next = tmp;
_size++;
isCached = false;
return true;
}
Опять же, я не программист на С ++ не понимаю этот код. Похоже, что *_prev
присваивается результат getNode(index-1)
, который может быть ложным. Тогда похоже, что он пытается получить доступ _prev->next
. Но будет ли _prev
ложным или *_prev
ложным? Я не понимаю этого.