Я пытаюсь закодировать реализацию примера Cube, Stack, приведенного в этом примере курса Coursera из Ханойских башен , чтобы узнать больше о C ++.
В stack.h
Я должен реализовать:
class Stack {
public:
void push_back(const Cube & cube);
Cube removeTop();
Cube & peekTop();
unsigned size() const;
friend std::ostream & operator<<(std::ostream & os, const Stack & stack);
private:
std::vector<Cube> cubes_;
};
У меня проблема с removeTop()
. Я думал о возвращении nullptr
, если стек (вектор) пуст, потому что поведение pop_back
не определено для пустого вектора.
Вызов pop_back для пустого контейнера не определен. Cpp Ссылка
inline Cube Stack::removeTop() {
if (!cubes_.empty()) {
Cube top_cube = cubes_.back();
cubes_.pop_back();
return top_cube;
}
else {
return nullptr;
}
}
Однако при компиляции возникает ошибка.
./stack.h:35:12: error: no viable conversion from returned value of type
'std::__1::nullptr_t' to function return type 'uiuc::Cube'
return nullptr;
Как защитить пользователя, если я не могу вернуть nullptr
? Я ограничен только тем, чтобы сказать пользователю, что функция не должна вызываться в пустом стеке, и позволить ему / ей позаботиться о проверке?