2016-12-09 3 views
0

Я создал этот метод, чтобы поместить некоторые данные в буфере:метод Put в буфер в C++

template <typename T> 
void locked_buffer<T>::put(const T & x, bool last) noexcept 
{ 
    using namespace std; 
    unique_lock<mutex> l{mut_}; 
    not_full_.wait(l, [this] { return !do_full(); }); 
    buf_[next_write_] = item{last,x}; 
    next_write_ = next_position(next_write_); 
    l.unlock(); 
    not_empty_.notify_one(); 
} 

Но, пытаясь поместить данные, состоящие в возвращении функции:

int size_b; 
locked_buffer<long buf1{size_b}>; 
buf1.put(image, true); //image is the return of the function 

У меня проблемы с логической переменной bool last, потому что у меня есть ошибки компиляции.

Спасибо.

Edit: ошибка, что я получил это следующий:

error: no matching function for call to 'locked_buffer<long int>::put(std::vector<std::vector<unsigned char>>&, bool)' 
+4

Сообщите, пожалуйста, [MCVE] включая сообщения о стеновых сообщениях. –

+0

Я могу только догадываться: locked_buffer

+1

Что именно вы получаете за компиляцию? – Eddge

ответ

2

error: no matching function for call to locked_buffer<long int>::put(std::vector<std::vector<unsigned char>>&, bool)

Сообщает вам все, что вам нужно знать:

  1. Ваш locked_buffer объект шаблонного к типу: long int
  2. Ваш 1 st аргумент имеет тип: vector<vector<unsigned char>>

Теперь мы знаем, что эти 2 типа должны быть одинаковыми из вашего определения функции: ошибка

template <typename T> 
void locked_buffer<T>::put(const T & x, bool last) noexcept 

составителя является правильным. Вам понадобится либо использовать соответствующий объект locked_buffer, либо создать новую функцию:

template <typename T, typename R> 
void locked_buffer<T>::put(const R& x, bool last) noexcept