🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2441閲覧

std::filesystem::directory_iterator(path).begin()がエラーになる原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/02/26 11:03

編集2021/02/26 12:44

提示コードですがディレクトリの現在のパスを自動で取得してそのディレクトリ内にあるフォルダを全て列挙したいのですがイテレーターを上手く作成出来ず困っています。この場合どうすればいいのでしょうか?
参考サイトのやり方ではなくイテレーターを使ってやりたいです。そのまま

エラー[
重大度レベル コード 説明 ファイル プロジェクト 行 抑制状態
エラー (アクティブ) E0135 class "std::filesystem::directory_iterator" にメンバー "begin" がありません C:\Users\yw325\Desktop\Level_Editor\Level_Editor\StartMenu.cpp Level_Editor 15

]

参考サイト:https://www.delftstack.com/ja/howto/cpp/how-to-get-list-of-files-in-a-directory-cpp/
参考サイト: https://cpprefjp.github.io/reference/filesystem/directory_iterator.html

cpp

1 2 3//コンスタラクタ 4StartMenu::StartMenu(Scene_Type t, Entry* e) : Scene_base(t,e) 5{ 6 std::string path = std::filesystem::current_path().string(); 7 8 for (std::filesystem::directory_iterator file = std::filesystem::directory_iterator(path).begin();) 9 std::cout << file->path() << std::endl; 10 11 12}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/02/26 11:12

「エラーになる」の説明を求む。
退会済みユーザー

退会済みユーザー

2021/02/26 11:30

コンパイルエラーです。
maisumakun

2021/02/26 11:59

どのようなエラーメッセージが出たのか、どうして質問時点で書かないのでしょうか?
Zuishin

2021/02/26 13:32

イテレータについて何回聞くんだ。
guest

回答1

0

ベストアンサー

directory_iterator 自体がイテレータで、イテレータを返す begin()end() というメンバ関数はありません。引数なしのコンストラクタを呼ぶと終端のイテレータになります。

c++

1namespace fs = std::filesystem; // コードを短くするため 2std::string path = fs::current_path().string(); 3for (auto i = fs::directory_iterator(path); i != fs::directory_iterator(); ++i) 4 std::cout << i->path() << std::endl;

cpprefjp のページを見ると「非メンバ関数」のところに begin()end() があります。これらは、以下のように使います。

c++

1namespace fs = std::filesystem; // コードを短くするため 2std::string path = fs::current_path().string(); 3auto iter = fs::directory_iterator(path); 4for (auto i = fs::begin(iter); i != fs::end(iter); ++i) 5 std::cout << i->path() << std::endl;

投稿2021/02/26 14:42

int32_t

総合スコア21679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問