0

C++ アプリケーションで反復子のベクトルを作成しようとしています。

std::vector<std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;

SelfDefinedTypeこのスニペットの上のどこかで宣言したクラスです。

この構成は少し複雑であることは認めざるを得ませんが、テンプレートには階層構造があります。

C++11 でコンパイルすると、次のコンパイル時エラーが発生します。

App.hpp:563:48: error: type/value mismatch at argument 1 in template 
parameter list for ‘template<class _Tp, class _Alloc> class std::vector’

これは何を意味するのでしょうか?std::list<std::shared_ptr<SelfDefinedType>>::iterator型ではなく値として扱っているようです。なんで?

開始ブラケットと終了ブラケットにスペースを追加しようとしましたが、役に立ちませんでした。また、typedef を使用してコンパイル エラーを抑制しようとしましたが、うまくいきませんでした。

4

2 に答える 2

3

タイプを指定する必要がありますstd::list<std::shared_ptr<SelfDefinedType>>::iterator

これiteratorは内部にネストされてstd::list<std::shared_ptr<SelfDefinedType>>おり、SelfDefinedTypeはテンプレートパラメータです。

パーサーは、 typenameで明示的に指定しない限り、イテレーターは型ではないと想定します。

エラーを解決するには(タイプ名に注意してください

std::vector<typename std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;
于 2013-02-19T21:58:44.770 に答える
0

これが問題かどうかはわかりませんが、これはコンパイラによって operator>> として理解できます。

std::vector< std::list< std::shared_ptr< SelfDefinedType > > ::iterator > edge_iters; を試し てください。

于 2013-02-19T08:40:32.207 に答える