2016-12-14 7 views
2

Я создал этот вектор, который имеет буферы:Вектор буферов в C++

std::vector<std::unique_ptr<locked_buffer<std::pair<int, std::vector<std::vector<unsigned char>>>>>> v1; 

Затем я заполняю этот вектор с n буферов и эти буферы имеют aux элементы. n - это номер int, который является аргументом. aux - еще один аргумент, который также является типом int.

for(int i=0; i<n; i++){ 
    v1.push_back(std::unique_ptr<locked_buffer<std::pair<int,std::vector<std::vector<unsigned char>>>>> (new locked_buffer<std::pair<int, std::vector<std::vector<unsigned char>>>>(aux))); 
} 

Но когда я пытаюсь получить доступ к каждому буферу вектора я не могу, потому что я не получил ясно, как я могу получить доступ к определенному элементу вектора структуры:

v1[0].put(image, false); 

ошибка компиляции, что у меня есть следующий один (The put функция определена на моей структуре пользовательских locked_buffer):

error: ‘_gnu_cxx::_alloc_traits<std::allocator<std::unique_ptr<locked_buffer<std::pair<int, std::vector<std::vector<unsigned char> > > > > > >::value_type {aka class std::unique_ptr<locked_buffer<std::pair<int, std::vector<std::vector<unsigned char> > > > >}’ has no member named ‘put’ 
v1[i].put(image, false); 

Спасибо.

+1

Я думаю, что вам нужно разыменовать 'unique_ptr', так что' v1 [I ] -> put ... ' – yassin

+0

- что двойной вектор в конце должен быть 2d-матрицей? Кроме того, это будет отличное место для использования 'using'. Например, 'template с использованием myBufferType = std :: pair >>;', а затем ваш тип: 'std :: unique_ptr >>' – RyanP

ответ

4

v1[0] является unique_ptr<locked_buffer<...>>. Для того, чтобы вызвать метод содержащийся locked_buffer, вам необходимо разыменования unique_ptr, т.е.

(*v1[0]).put(image, false); 

или

v1[0]->put(image, false);