ページ 11

std::vector<T> のイテレータを関数の戻り値として使いたい

Posted: 2021年5月22日(土) 01:08
by CAMATA
Win10 / Visual Studio 2019 の C++ を使っています。
次のようなテンプレートクラスを動作させたいのですが、メンバ関数 begin と end の行で
「C2061 構文エラー: 識別子 'iterator'」のようなエラーがでてしまいます。
コンテナの iterator は、そのまま戻り値の型として使うことはできないのでしょうか?

コード:

#include <vector>

template <class T> class MyVector {
private:
  std::vector<T> m_vector;
public:
  void add(T value) {
    m_vector.push_back(value);
  }
  std::vector<T>::iterator begin() { // <==== エラー!!
    return m_vector.begin();
  }
  std::vector<T>::iterator end() { // <==== エラー!!
    return m_vector.end();
  }
};

int main() {
  MyVector<int> values;
  values.add(1);
  values.add(2);
  for (auto it=values.begin(); it!=values.end(); it++) {
    // 反復
  }
  return 0;
}

Re: std::vector<T> のイテレータを関数の戻り値として使いたい

Posted: 2021年5月22日(土) 02:35
by みけCAT
よくわかっていないですが、std::vector<T>::iteratorの前にtypenameを加えるといいかもしれません.

typenameなし

typenameあり

Re: std::vector<T> のイテレータを関数の戻り値として使いたい

Posted: 2021年5月22日(土) 14:59
by CAMATA
うまくいきました!
こんなに単純なことだったんですね…
ありがとうございます