2017-11-18 9 views
0

나는 현재와 같은 정의 된 벡터에 액세스하려고 :벡터에 액세스 할 수없는 이유는 무엇입니까?

#include <iostream> 
#include <cstdlib> 
#include <vector> 
#include <string> 

using namespace std; 
template<class T> 
class file 
{ 
    public: 
     typedef vector<vector<T> > buffer; 
}; 


int main() 
{ 
    file<double> test; 
    cout << test.buffer.size() << endl; 


    std::vector<pair<string, file<double> > > list_of_files; 

    for (const auto& [name, file] : list_of_files) 
    { 
     cout << file.buffer.size() << endl; 
    } 

} 

내가 무엇입니까 오류 메시지가 나는 현재 일을 오전처럼 buffer 범위 지정이 무효 인 경우이다?하지만 왜 잘못인가? 왜 그렇게되어야하는지 알지 못해요?

buffer의 내부 및 외부 벡터를 반복하는 for 루프에 있지만 범위를 지정할 수 없기 때문에 액세스 할 수 없습니까? 어떻게 접근합니까?

+1

'buffer'는 (는) 벡터가 아닙니다. typedef입니다. 즉, 나중에 'buffer myBuffer;'라는 벡터를 'vector > myBuffer;'의 줄임표로 선언 할 수 있습니다. 그러나 당신의 클래스에는 아직 벡터가 없습니다. –

답변

1

코드가 buffervector<vector<T>>의 새 유형으로 선언했기 때문에 오류의 원인이 있습니다. 당신이 file의 구성원이어야 buffer을하려면 다음과 같이 수행 할 수 있습니다 :

template<class T> 
class file 
{ 
public: 
    std::vector<std::vector<T>> buffer; 
}; 

그를 변경 한 후, main() 오류없이 컴파일해야한다.