質問編集履歴

2

提示コードを修正しました。

2021/01/29 08:04

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,30 @@
1
- 提示コードのコメント部で囲ってあるコードですがなぜ以下のエラーが発生するのでしょうか? 上の方でしっかり前方宣言されているはずですが理由ません。
1
+ 提示コードのコメント部で囲ってあるコードですがなぜ以下のエラーが発生するのでしょうか? エラーが4件起きているですが悪いの理解出来ません。
2
+
3
+
4
+
5
+
6
+
2
-
7
+ エラー1「 "std::array<std::array<Stage::MapChip, 10Ui64>, 10Ui64>" から "std::array<std::array<MapChip, 10Ui64>, 10Ui64>" への適切なユーザー定義変換が存在しません 」
3
-
4
-
5
-
6
-
7
-
8
-
8
+
9
+
10
+
11
+
12
+
9
- エラ「
13
+ エラー2 'Stage::getMap': 再定義されています。異なる基本型です。 」
14
+
15
+
16
+
17
+
18
+
10
-
19
+ エラー3「 'std::array<std::array<MapChip,10>,10> Stage::getMap(void)': オーバーロード関数は、'std::array<std::array<Stage::MapChip,10>,10> Stage::getMap(void)' と戻り値の型のみが異なります。 」
20
+
21
+
22
+
23
+
24
+
11
- C2079 'std::array<MapChip,10>::_Elems' が 未定義の struct 'MapChip' で使用しています。
25
+ エラー4「 宣言に "std::array<std::array<Stage::MapChip, 10Ui64>, 10Ui64> Stage::getMap()" 」
12
-
13
-  」
26
+
27
+
14
28
 
15
29
 
16
30
 
@@ -44,12 +58,6 @@
44
58
 
45
59
  // 前方宣言
46
60
 
47
- struct DrawUV;
48
-
49
-
50
-
51
- typedef struct MapChip MapChip;
52
-
53
61
 
54
62
 
55
63
  class Stage : public Actor_2D
@@ -58,6 +66,12 @@
58
66
 
59
67
  public:
60
68
 
69
+
70
+
71
+
72
+
73
+
74
+
61
75
  Stage(class Game* g, const char* fileName); //コンストラクタ
62
76
 
63
77
  ~Stage(); //デストラクタ
@@ -70,78 +84,70 @@
70
84
 
71
85
 
72
86
 
87
+
88
+
89
+ // 描画UV座標
90
+
91
+ typedef struct DrawUV
92
+
93
+ {
94
+
95
+ glm::vec2 start; //ここから
96
+
97
+ glm::vec2 end; //ここまで
98
+
99
+
100
+
101
+ }DrawUV;
102
+
103
+
104
+
105
+ // マップチップの種別
106
+
107
+ typedef enum MapChipType
108
+
109
+ {
110
+
111
+ Block, //破壊 可能
112
+
113
+ notBreak_Block, //破壊 不可
114
+
115
+ Item, //アイテム
116
+
117
+
118
+
119
+ Invalid, //無効
120
+
121
+ } MapChipType;
122
+
123
+
124
+
125
+
126
+
127
+ // マップチップの情報
128
+
129
+ typedef struct MapChip
130
+
131
+ {
132
+
133
+ MapChipType type; //種類
134
+
135
+ glm::vec2 mPosition; //座標
136
+
137
+ DrawUV UV; //描画範囲
138
+
139
+ }MapChip;
140
+
141
+ ////////////////////////////////////////////////////////////////////////////////////////
142
+
143
+ std::array< std::array<MapChip, 10>, 10> getMap(); //マップセル取得
144
+
73
- ///////////////////////////////////////////////////////////////////////////////////
145
+ ///////////////////////////////////////////////////////////////////////////////////////
74
-
75
- std::array< std::array<MapChip, 10>, 10> getMap();
76
-
77
- ///////////////////////////////////////////////////////////////////////////////////
78
-
79
-
80
146
 
81
147
  private:
82
148
 
83
149
 
84
150
 
85
- // マップチップの種別
86
-
87
- typedef enum MapChipType
88
-
89
- {
90
-
91
- Block, //破壊 可能
92
-
93
- notBreak_Block, //破壊 不可
94
-
95
- Item, //アイテム
96
-
97
-
98
-
99
- Invalid, //無効
100
-
101
- } MapChipType;
102
-
103
-
104
-
105
-
106
-
107
- // 描画UV座標
108
-
109
- typedef struct DrawUV
110
-
111
- {
112
-
113
- glm::vec2 start; //ここから
114
-
115
- glm::vec2 end; //ここまで
116
-
117
-
118
-
119
- }DrawUV;
120
-
121
-
122
-
123
-
124
-
125
- // マップチップの情報
126
-
127
- typedef struct MapChip
128
-
129
- {
130
-
131
- MapChipType type; //種類
132
-
133
- glm::vec2 mPosition; //座標
134
-
135
- DrawUV UV; //描画範囲
136
-
137
- }MapChip;
138
-
139
-
140
-
141
-
142
-
143
-
144
-
145
151
  std::shared_ptr<Sprite> mSprite; //スプライトクラス
146
152
 
147
153
 
@@ -154,16 +160,6 @@
154
160
 
155
161
  glm::vec2 notBreak_blockUV; //固定ブロックのUV座標
156
162
 
157
-
158
-
159
-
160
-
161
-
162
-
163
-
164
-
165
-
166
-
167
163
  };
168
164
 
169
165
 
@@ -186,8 +182,16 @@
186
182
 
187
183
  #include "../../Header/Game.hpp"
188
184
 
185
+
186
+
187
+ #include <vector>
188
+
189
189
  #include <array>
190
190
 
191
+ #include <iostream>
192
+
193
+ #include <algorithm>
194
+
191
195
 
192
196
 
193
197
 
@@ -248,12 +252,6 @@
248
252
 
249
253
 
250
254
 
251
-
252
-
253
-
254
-
255
-
256
-
257
255
  // 座標を設定
258
256
 
259
257
  for (int y = 0; y < mMap.size(); y++)
@@ -290,32 +288,6 @@
290
288
 
291
289
 
292
290
 
293
-
294
-
295
-
296
-
297
- // マップを初期化
298
-
299
-
300
-
301
-
302
-
303
-
304
-
305
-
306
-
307
- //mMap.at(0).at(1) = MapChipType::Block;
308
-
309
-
310
-
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
291
  }
320
292
 
321
293
 
@@ -334,6 +306,10 @@
334
306
 
335
307
  {
336
308
 
309
+
310
+
311
+
312
+
337
313
  mSprite->DrawGraph(mMap.at(y).at(x).mPosition, mMap.at(y).at(x).UV.start, mMap.at(y).at(x).UV.end);
338
314
 
339
315
  }
@@ -344,9 +320,9 @@
344
320
 
345
321
  }
346
322
 
347
- ///////////////////////////////////////////////////////////////////
323
+ //////////////////////////////////////////////////////////////////////////////////
348
-
324
+
349
- std::array< std::array<MapChip, 10>, 10> Stage::getMap()
325
+ std::array< std::array<MapChip, 10>, 10> Stage::getMap()
350
326
 
351
327
  {
352
328
 
@@ -354,7 +330,7 @@
354
330
 
355
331
  }
356
332
 
357
- ///////////////////////////////////////////////////////////////////
333
+ //////////////////////////////////////////////////////////////////////////////////
358
334
 
359
335
 
360
336
 

1

タイトルと文章を修正しました。

2021/01/29 08:04

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- std::array をreturn す法が知りたい。
1
+ 構造体が未定義と表示され原因と対処法が知りたい。
test CHANGED
@@ -1,4 +1,16 @@
1
- 提示コードですがソースとヘッダーを分け書いていですがどうればメンバ関数によreturn して参照出来るのでしょうか?
1
+ 提示コードのコメント部囲っコードですがなぜ以下のエラーが発生するのでしょうか? 上の方でしっかり前方宣言されているはずですが理由がわかりません。
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ エラ「
10
+
11
+ C2079 'std::array<MapChip,10>::_Elems' が 未定義の struct 'MapChip' で使用しています。
12
+
13
+  」
2
14
 
3
15
 
4
16
 
@@ -6,13 +18,335 @@
6
18
 
7
19
  ```cpp
8
20
 
21
+ #ifndef ___STAGE_HPP_
22
+
23
+ #define ___STAGE_HPP_
24
+
25
+
26
+
27
+ #include "../Actor_2D.hpp"
28
+
29
+ #include "Block.hpp"
30
+
31
+ #include "../Game.hpp"
32
+
33
+
34
+
35
+ #include <vector>
36
+
37
+ #include <array>
38
+
39
+ #include <iostream>
40
+
41
+ #include <algorithm>
42
+
43
+
44
+
45
+ // 前方宣言
46
+
47
+ struct DrawUV;
48
+
49
+
50
+
51
+ typedef struct MapChip MapChip;
52
+
53
+
54
+
55
+ class Stage : public Actor_2D
56
+
57
+ {
58
+
59
+ public:
60
+
61
+ Stage(class Game* g, const char* fileName); //コンストラクタ
62
+
63
+ ~Stage(); //デストラクタ
64
+
65
+
66
+
67
+ void Update() override; //更新
68
+
69
+ void Draw() override; //描画更新
70
+
71
+
72
+
73
+ ///////////////////////////////////////////////////////////////////////////////////
74
+
75
+ std::array< std::array<MapChip, 10>, 10> getMap();
76
+
77
+ ///////////////////////////////////////////////////////////////////////////////////
78
+
79
+
80
+
81
+ private:
82
+
83
+
84
+
85
+ // マップチップの種別
86
+
87
+ typedef enum MapChipType
88
+
89
+ {
90
+
91
+ Block, //破壊 可能
92
+
93
+ notBreak_Block, //破壊 不可
94
+
95
+ Item, //アイテム
96
+
97
+
98
+
99
+ Invalid, //無効
100
+
101
+ } MapChipType;
102
+
103
+
104
+
105
+
106
+
107
+ // 描画UV座標
108
+
109
+ typedef struct DrawUV
110
+
111
+ {
112
+
113
+ glm::vec2 start; //ここから
114
+
115
+ glm::vec2 end; //ここまで
116
+
117
+
118
+
119
+ }DrawUV;
120
+
121
+
122
+
123
+
124
+
125
+ // マップチップの情報
126
+
127
+ typedef struct MapChip
128
+
129
+ {
130
+
131
+ MapChipType type; //種類
132
+
133
+ glm::vec2 mPosition; //座標
134
+
135
+ DrawUV UV; //描画範囲
136
+
137
+ }MapChip;
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ std::shared_ptr<Sprite> mSprite; //スプライトクラス
146
+
147
+
148
+
9
- std::array< std::array<MapChip, 10>, 10> getMap(); //部での宣言
149
+ std::array< std::array<MapChip,10>,10> mMap; //プデ
150
+
151
+
152
+
10
-
153
+ glm::vec2 blockUV; //ブロックのUV座標
154
+
11
-
155
+ glm::vec2 notBreak_blockUV; //固定ブロックのUV座標
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
12
-
167
+ };
168
+
169
+
170
+
13
-
171
+ #endif;
172
+
173
+
174
+
14
-
175
+ ```
176
+
177
+
178
+
179
+ ```cpp
180
+
181
+ #include "../../Header/Game/Stage.hpp"
182
+
183
+ #include "../../Header/Actor_2D.hpp"
184
+
185
+
186
+
187
+ #include "../../Header/Game.hpp"
188
+
189
+ #include <array>
190
+
191
+
192
+
193
+
194
+
195
+ struct MapChip;
196
+
197
+
198
+
199
+ // コンストラクタ
200
+
201
+ Stage::Stage(class Game* g, const char* fileName) : Actor_2D()
202
+
203
+ {
204
+
205
+ Owner = g; // Game クラス
206
+
207
+ mSprite = std::make_shared<Sprite>(Owner,fileName); //スプライトクラス
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+ // マップ配列を初期化
220
+
221
+ MapChip m{
222
+
223
+ MapChipType::Invalid, //マップの種類
224
+
225
+ glm::vec2(0,0), //座標
226
+
227
+ DrawUV{ glm::vec2(0,0),glm::vec2(0,0)} //描画UV座標
228
+
229
+ };
230
+
231
+
232
+
233
+
234
+
235
+ for (int i = 0; i < mMap.size(); i++){
236
+
237
+ std::fill(mMap.at(i).begin(), mMap.at(i).end(), m);
238
+
239
+ }
240
+
241
+
242
+
243
+ //画面の左上
244
+
245
+ const int width = -(int)(SCREEN_WIDTH / 2); //
246
+
247
+ const int height = (int)(SCREEN_HEIGHT / 2); //
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+ // 座標を設定
258
+
259
+ for (int y = 0; y < mMap.size(); y++)
260
+
261
+ {
262
+
263
+ for (int x = 0; x < mMap.at(y).size(); x++)
264
+
265
+ {
266
+
267
+ //
268
+
269
+ mMap.at(y).at(x).mPosition.x = (float) (width + (CELL * x));
270
+
271
+ mMap.at(y).at(x).mPosition.y = (float) (height - (CELL * y));
272
+
273
+
274
+
275
+ mMap.at(y).at(x).type = MapChipType::Block; //
276
+
277
+
278
+
279
+ //
280
+
281
+ mMap.at(y).at(x).UV.start = glm::vec2(0, 0);
282
+
283
+ mMap.at(y).at(x).UV.start = glm::vec2(CELL, CELL);
284
+
285
+
286
+
287
+ }
288
+
289
+ }
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+ // マップを初期化
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+ //mMap.at(0).at(1) = MapChipType::Block;
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+ }
320
+
321
+
322
+
323
+ // 描画
324
+
325
+ void Stage::Draw()
326
+
327
+ {
328
+
329
+ for (int y = 0; y < mMap.size(); y++)
330
+
331
+ {
332
+
333
+ for (int x = 0; x < mMap.at(y).size(); x++)
334
+
335
+ {
336
+
337
+ mSprite->DrawGraph(mMap.at(y).at(x).mPosition, mMap.at(y).at(x).UV.start, mMap.at(y).at(x).UV.end);
338
+
339
+ }
340
+
341
+ }
342
+
343
+
344
+
345
+ }
346
+
347
+ ///////////////////////////////////////////////////////////////////
348
+
15
- std::array< std::array<MapChip, 10>, 10> Stage::getMap() //定義
349
+ std::array< std::array<MapChip, 10>, 10> Stage::getMap()
16
350
 
17
351
  {
18
352
 
@@ -20,10 +354,34 @@
20
354
 
21
355
  }
22
356
 
23
-
357
+ ///////////////////////////////////////////////////////////////////
358
+
359
+
360
+
24
-
361
+ // 更新
362
+
25
-
363
+ void Stage::Update()
364
+
26
-
365
+ {
366
+
367
+
368
+
27
-
369
+ }
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+ // デストラクタ
378
+
379
+ Stage::~Stage()
380
+
381
+ {
382
+
383
+
384
+
385
+ }
28
386
 
29
387
  ```