2017-11-18 14 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の内側と外側のベクトルを繰り返し処理しようとしていますが、スコープできないためアクセスできません。どうすればそれにアクセスできますか?

+1

'buffer'はベクトルではありません。これはtypedefです。つまり、 'buffer myBuffer;'を使用して、 'vector > myBuffer;'の省略形として後でベクターを宣言することができます。しかし、あなたのクラスにはまだベクトルがありません。 –

答えて

1

コードがvector<vector<T>>の新しいタイプとしてbufferを宣言しているため、エラーが発生したためです。 main()がエラーなしでコンパイルする必要があり、ことを変更した後

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

:あなたはbufferfileの一員になりたい場合は、このようにそれを行うことができます。

関連する問題