std ::マップとテンプレートクラス内のネストされた構造体:: const_iteratorの?

StackOverflow https://stackoverflow.com/questions/661481

  •  20-08-2019
  •  | 
  •  

質問

folowingコードは、反復子が宣言されている行に構文エラーを生成します

template <typename T>
class A
{
  public:

    struct B
    {
       int x, y, z;
    };

    void a()
    {
        std::map<int, B>::const_iterator itr; // error: ; expected before itr
    }

    std::vector<T> v;
    std::map<int, B> m;
};

Aはテンプレートクラスである場合にのみ発生します。このコードで間違っては何ですか?私はAのうち、Bを移動すると、コードが正常にコンパイルされます。

役に立ちましたか?

解決

あなたは型名が必要になります:

 typename std::map<int, B>::const_iterator itr;

イテレータは依存タイプ(Bに依存)であり、あなたがこのような状況を持っている場合、コンパイラは、型名と、それを明確にする必要があります。

ここでの問題の合理的な議論がありますするます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top