Есть следующий класс:
class InteractiveMode {
public:
/.../
private:
static vector<std::shared_ptr<InteractiveMode>> stackStates;
/.../
};
И два метода:
void InteractiveMode::Life() {
while(1) {
/.../
auto state = std::make_shared<InteractiveMode>(*this);
stackStates.emplace_back(state);
}
}
void InteractiveMode::back() {
if (stackStates.empty()) {
std::cout << "Stack of states is empty!";
exit(EXIT_FAILURE);
}
shared_ptr<InteractiveMode> ptr = stackStates.pop_back();
/.../
}
При компиляции получаю следующую ошибку:
error: conversion from 'void' to non-scalar type 'std::shared_ptr' requested shared_ptr ptr = stackStates.pop_back();
То есть stackStates.pop_back() возвращает void вместо нужного мне shared_ptr<...>. Что я сделал не так?
Неправильно пытаетесь получить значение из void-функции.
pop_back только удаляет, ничего не возвращая. Если нужно последнее значение - используйте back().
Сборка персонального компьютера от Artline: умный выбор для современных пользователей