質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
C++

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

Q&A

1回答

482閲覧

[c++] クラスの宣言で初期化をする方法

退会済みユーザー

退会済みユーザー

総合スコア0

C++

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

0グッド

0クリップ

投稿2022/08/11 00:59

編集2022/11/12 20:55

提示コードですがクラス部の///コメント部にある乱数のクラスの宣言をすると、エラーになるのですが
提示コードコンストラクタのような書き方をしたいのですがこれはどうやってコンパイルエラーを回避するのでしょうか?

コンストラクタ

cpp

1/*################################################# 2# 初期化 3###################################################*/ 4Game::Game(SDL_Renderer *ren) 5{ 6 render = ren; 7 8 sprite = LoadImage("ast/piece.png"); 9 position = glm::ivec2(3,0); 10 11 std::random_device seed_gen; 12 std::default_random_engine engine(seed_gen); 13 std::uniform_int_distribution<> dist(0, 9); 14 15}
Error
shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/Tetris$ sh run.sh g++ -c -MMD -MP src/Game.cpp -o obj/Game.o In file included from src/Game.cpp:9: src/Game.hpp:57:39: error: ‘seed_gen’ is not a type 57 | std::default_random_engine engine(seed_gen()); | ^~~~~~~~ src/Game.hpp:58:42: error: expected identifier before numeric constant 58 | std::uniform_int_distribution<> dist(0, 7); | ^ src/Game.hpp:58:42: error: expected ‘,’ or ‘...’ before numeric constant make: *** [Makefile:13: obj/Game.o] エラー 1 Compile Error
クラス

cpp

1#ifndef ___GAME_HPP__ 2#define ___GAME_HPP__ 3#include <SDL2/SDL.h> 4#include <glm/glm.hpp> 5#include <iostream> 6#include <locale.h> 7#include <random> 8 9#define byte char 10#define PIECE_SIZE ( (int) sprite.surface->h ) //ピースの大きさ 11#define PIECE_NUM ((int)4) //ピースの数 12#define PIECE_WIDTH ((int)4) //ピースの数 13#define PIECE_HEIGHT ((int)4) //ピースの数 14 15#define STAGE_HEIGHT ((int)20) //ステージの大きさ 16#define STAGE_WIDTH ((int)10) //ステージの大きさ 17 18#define STAGE_POSITION_X ((int) 300) 19#define STAGE_POSITION_Y ((int) 200) 20 21 22class Game 23{ 24public: 25 Game(SDL_Renderer *ren); 26 ~Game(); 27 28 void Update(); 29 void Render(); 30 31 bool getIsExit(); 32private: 33 34 35 enum class PieceType 36 { 37 Red, 38 Blue, 39 Orange, 40 Yellow, 41 Purple, 42 Cyan, 43 Green, 44 Black, 45 white 46 }; 47////////////////////////////////////////////////////////////////////////////////////// 48 std::random_device seed_gen; 49 std::default_random_engine engine(seed_gen); 50 std::uniform_int_distribution<> dist(0, 9); 51////////////////////////////////////////////////////////////////////////////////////// 52 53 54 55 typedef struct Sprite_Image 56 { 57 SDL_Surface *surface = NULL; 58 SDL_Texture *texture = NULL; 59 }Sprite; 60 61 Sprite sprite; 62 63 glm::ivec2 position; 64 PieceType nowPiece; 65 void RenderPiece(glm::ivec2 pos,PieceType type); 66 67 68 void Event(); 69 void RenderSprite(glm::ivec2 pos,PieceType piece); 70 Sprite LoadImage(const char* fileName); 71 72 73 74 bool exit = false; 75 SDL_Event event; 76 77 SDL_Renderer *render; 78}; 79 80 81 82#endif 83 84

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

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

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

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

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

maisumakun

2022/08/11 01:07

「エラーになる」とだけ書いて具体的なエラー内容を提示しないのは、何らかのポリシーがあって意図的にやっていることなのでしょうか。
episteme

2022/08/11 04:35

> 提示コードですがクラス部のコメント部にある乱数のコードですがそのように実装するとエラーになるのですがこの場合はコンストラクタのような書き方をしたいのですがこれはどうやってコンパイルエラーを回避するのでしょうか? 日本語でおねがいします。
guest

回答1

0

エラーメッセージ

src/Game.hpp:57:39: error: ‘seed_gen’ is not a type 57 | std::default_random_engine engine(seed_gen()); | ^~~~~~~~

にある通り

std::default_random_engine engine(seed_gen);

の部分を

std::default_random_engine engine(seed_gen());

に変えると動くのではないでしょうか?

https://cpprefjp.github.io/reference/random/default_random_engine.html

投稿2022/11/12 11:55

ujimushi_sradjp

総合スコア2066

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問