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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
CAMATA

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

#1

投稿記事 by CAMATA » 2年前

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;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 2年前

よくわかっていないですが、std::vector<T>::iteratorの前にtypenameを加えるといいかもしれません.

typenameなし

typenameあり
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

CAMATA

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

#3

投稿記事 by CAMATA » 2年前

うまくいきました!
こんなに単純なことだったんですね…
ありがとうございます

返信

“C言語何でも質問掲示板” へ戻る