Параллелизм C++ в действии, вопрос threadsafe_stack, неопределенная ссылка на `vtable forempty_stack'C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Параллелизм C++ в действии, вопрос threadsafe_stack, неопределенная ссылка на `vtable forempty_stack'

Сообщение Anonymous »

Я пытался реализовать 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»