2016-12-14 10 views
2

내가 버퍼를 가지고이 벡터, 만든 그런 다음벡터 ++

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); 

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); 

감사 : 내가있어

컴파일 에러합니다 (put 기능이 내 사용자 정의 locked_buffer 구조에 정의)은 다음 중 하나입니다.

+1

난 당신이'unique_ptr' 역 참조에 필요가 있다고 생각합니다, 그래서 ['내가를 V1을 ] -> put ... ' – yassin

+0

2 차원 행렬로 끝나는 double 벡터입니까? 또한, 이것은'using '을 사용하기에 좋은 장소입니다. 예를 들어 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);