Я пытаюсь написать простую программу, которая создает и использует определенное количество (переменная - это параметр, передаваемый из командной строки) блокирующих очередей. Чтобы легко получить к ним доступ, я подумал о создании вектора очередей.
Я использую g ++ - 8 для компиляции программы. Моя очередь предоставлена моим профессором, поэтому я не могу внести никаких изменений в ее код.
Вот код, который я разработал:
blocking_queue.hpp
#ifndef SKYLINE_BLOCKING_QUEUE_HPP
#define SKYLINE_BLOCKING_QUEUE_HPP
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <deque>
#include <vector>
#include <chrono>
#include <cstddef>
#include <math.h>
#include <string>
#include <thread>
using namespace std::literals::chrono_literals;
//
// needed a blocking queue
// here is a sample queue.
//
template <typename T>
class blocking_queue
{
private:
std::mutex d_mutex;
std::condition_variable d_condition;
std::deque<T> d_queue;
public:
blocking_queue(){}
void push(T const& value) {
{
std::unique_lock<std::mutex> lock(this->d_mutex);
d_queue.push_front(value);
}
this->d_condition.notify_one();
}
T pop() {
std::unique_lock<std::mutex> lock(this->d_mutex);
this->d_condition.wait(lock, [=]{return !this->d_queue.empty(); });
T rc(std::move(this->d_queue.back()));
this->d_queue.pop_back();
return rc;
}
bool is_empty() {
std::unique_lock<std::mutex> lock(this->d_mutex);
this->d_condition.wait(lock, [=]{return !this->d_queue.empty(); });
printf("ADDED A INT\n");
return false;
}
int size() {
std::unique_lock<std::mutex> lock(this->d_mutex);
return(d_queue.size());
}
};
#endif // SKYLINE_BLOCKING_QUEUE_HPP
test.cpp
int main(char argc, char* argv[]) {
nw = atoi(argv[0]);
vector<blocking_queue<int>> myVector;
for(int i = 0; i < nw; i++) {
myVector.emplace_back();
}
}
Когда я пытаюсь скомпилировать программу, g ++ выдает следующую ошибку:
error: use of deleted function ‘blocking_queue<int>::blocking_queue(blocking_queue<int>&&)’
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ./test.cpp:10:
./blocking_queue.hpp:28:7: note: ‘blocking_queue<int>::blocking_queue(blocking_queue<int>&&)’ is implicitly deleted because the default definition would be ill-formed:
class blocking_queue
^~~~~~~~~~~~~~
./blocking_queue.hpp:28:7: error: use of deleted function ‘std::mutex::mutex(const std::mutex&)’
In file included from /usr/include/c++/8/mutex:43,
from ./blocking_queue.hpp:9,
from ./test.cpp:10:
/usr/include/c++/8/bits/std_mutex.h:97:5: note: declared here
mutex(const mutex&) = delete;
^~~~~
In file included from ./test.cpp:10:
./blocking_queue.hpp:28:7: error: use of deleted function ‘std::condition_variable::condition_variable(const std::condition_variable&)’
class blocking_queue
^~~~~~~~~~~~~~
Как мне решить проблему?