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

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

詳細はこちら
C++

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

Q&A

解決済

1回答

1641閲覧

乱数生成で std::uniform_int_distribution<>のコンストラクタの引数がエラーになる原因が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

C++

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

0グッド

0クリップ

投稿2020/12/22 13:37

質問通りですが定義部の//ここでエラーのコードでこのようなエラーが出るのですがどうしたらいいのでしょうか?
公式リファレンス: https://cpprefjp.github.io/reference/random/uniform_int_distribution/op_constructor.html

[

エラー C2664 'int std::uniform_int<_Ty>::operator ()<int>(_Engine &,int) const': 引数 1 を 'int' から '_Engine &' へ変換できません

]

cpp

1#ifndef ___MAIN_SCREEN_HPP_ 2#define ___MAIN_SCREEN_HPP_ 3 4#include <compare> 5#include <iostream> 6#include <filesystem> 7#include <random> 8#include <map> 9#include <vector> 10#include <Windows.h> 11#include "stdio.h" 12#include <random> 13 14#include "SoundPlayer.hpp" 15#include "KeyInput.hpp" 16#include "KeyCode.hpp" 17#include "Debug_Log.hpp" 18#include "ScreenBuffer.hpp" 19 20 21/*############################################ 22# メイン画面 23##############################################*/ 24 25class Main_Screen 26{ 27public: 28 29 Main_Screen(); //コンストラクタ 30 ~Main_Screen(); //デストラクタ 31 void Loop(); //ループ 32 void Update(); //計算 33 void GenerateOutput(); //描画 34 void Input(); //キー入力 35 36private: 37 38 /* コンポーネント 関係 */ 39 KeyInput *mInput; //キー入力 40 SoundPlayer *mSound; //音楽再生 41 Debug_Log *mText; //デバッグ用 テキストファイルに書き込む 42 ScreenBuffer *mWindow; //画面描画 43 44 45 /* ファイルパス 関係 */ 46 std::vector<std::string> mPlayList_Name; //プレイリスト ファイル名 47 int mPos_y = 0; //カーソルの位置 48 std::string mPlayPath; //プレイしてるパス 49 std::string mNowPlay_Path; //現在再生中のパス 50 std::string mPlayName; //再生中のファイル名 51 52 53 54 55 56 57 bool EnterKey = false; 58 59 60 // 再生状態 関係 61 62 63////////////////////////////////////////////////////////////////////////////////////////////// 64 // 乱数 65 std::random_device rnd; // 非決定的な乱数生成器を生成 66 std::mt19937 mt; // メルセンヌ・ツイスタの32ビット版、引数は初期シード値 67 std::uniform_int_distribution<int> Rand; 68////////////////////////////////////////////////////////////////////////////////////////////// 69 70 71 // エラー処理 72 bool mNoDirectory = false; // ルートディレクトリがない場合 73 bool mNoFile = false; // 音楽ファイルがない場合 74 75}; 76 77 78 79#endif 80

cpp

1#include <iostream> 2#include <algorithm> 3#include <vector> 4#include <compare> 5#include <filesystem> 6#include <map> 7#include <WINDOWS.h> 8#include "stdio.h" 9#include <random> 10 11 12#include "Main_Screen.hpp" 13#include "SoundPlayer.hpp" 14#include "KeyInput.hpp" 15#include "ScreenBuffer.hpp" 16 17//コンストラクタ 18Main_Screen::Main_Screen() 19{ 20 ///////////////////////////////////////////////////////////////////////////////// 21 mt.seed(rnd()); 22 Rand(0,100);// ここでエラー 23 ///////////////////////////////////////////////////////////////////////////////// 24 25 /* コンポーネント 関係 */ 26 mText = new Debug_Log("Main_Screen.txt"); //デバッグ用 テキスト出力 27 mWindow = new ScreenBuffer(); //画面描画 28 mInput = new KeyInput(); //キー入力 29 mSound = new SoundPlayer(); //サウンド再生 30 31// std::string path = "M"; //ルートパス 32 std::string path = "Music"; //ルートパス 33 try { 34 for (const auto& fp : std::filesystem::directory_iterator::directory_iterator(path)) 35 { 36 // mText->Write("ええええ\n"); 37 mPlayList_Name.push_back(fp.path().string()); 38 39 } 40 41 // ファイルの数が0の場合 42 if (mPlayList_Name.size() == 0) 43 { 44 mNoFile = true; 45 } 46 } 47 catch (std::exception e) 48 { 49 // ディレクトリがない場合は作成して終了 50 51 mText->Write("%s", e.what()); 52 std::filesystem::create_directory(path); 53 mNoDirectory = true; 54 } 55 56 57 58} 59 60

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージのとおりです。当該のコードはコンストラクタの呼び出しではなくoperator()の呼び出しとして解釈されています。

コンストラクタを呼びたいなら、Main_Screen::Main_Screen() : Rand(0,100) {のように、イニシャライザとして書いてください。

投稿2020/12/22 13:44

maisumakun

総合スコア145963

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

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

退会済みユーザー

退会済みユーザー

2020/12/22 13:49 編集

すいませんコンパイルエラーになるのですがどうすればよいか提示コードを書いてもらえますでしょうか? {を閉じましたがエラーになります。 追記 解決しました。 std::uniform_int_distribution<> Rand(0, 100);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問