Я пытался реализовать threadsafe_stack в главе 3 «Параллелизм в действии» на C++, и когда я попытался использовать его в main.cpp с двумя потоками, я получил сообщение об ошибке: неопределенная ссылка на `vtable для пустого_стака', это произошло, когда я попытался использовать функцию-член pop(). Я не понимаю почему, может кто-нибудь помочь?
Вот коды
Threadsafe_stack.h
#include
#include
#include
#include
struct empty_stack: std::exception {
const char* what() const throw();
};
template
class Threadsafe_stack {
private:
std::stack data;
mutable std::mutex m;
public:
Threadsafe_stack() {}
~Threadsafe_stack() {}
//copy constructor
Threadsafe_stack(const Threadsafe_stack& other) {
std::lock_guard lock(other.m);
data = other.data;
}
//delete assign operator
Threadsafe_stack& operator=(const Threadsafe_stack&) = delete;
void push(T new_val) {
std::lock_guard lock(m);
data.push(std::move(new_val));
}
std::shared_ptr pop() {
std::lock_guard lock(m);
if (data.empty()) {
throw empty_stack();
}
std::shared_ptr const res(std::make_shared(data.top()));
data.pop();
return res;
}
void pop(T& val) {
std::lock_guard lock(m);
if (data.empty()) {
throw empty_stack();
}
val = data.top();
data.pop();
}
bool empty() const {
std::lock_guard lock(m);
return data.empty();
}
};
main.cpp
#include
#include
#include "Threadsafe_stack.h"
int main(int argc, char *argv[]) {
Threadsafe_stack ts_stack;
std::thread t1([&ts_stack]() {
for (int i = 1; i
Подробнее здесь: https://stackoverflow.com/questions/792 ... nce-to-vta
Параллелизм C++ в действии, вопрос threadsafe_stack, неопределенная ссылка на `vtable forempty_stack' ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Неопределенная ссылка на vtable; Проблема виртуальной функции [дублировать]
Anonymous » » в форуме C++ - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-