下記のコードの////コメントの内部のコードですが外部のクラス内の構造体のインスタンスを配列のポインタに入れる方法はどうすればいいのでしょうか?型名がありませんや不完全な型など様々エラーが発生してしまいどうすればいいかわかりません。Player::Player();コンストラクタの
for文のコードはどうすればいいのでしょうか?
cpp
1#ifndef ___PLAYER_HPP_ 2#define ___PLAYER_HPP_ 3 4//自作ヘッダー類 5#include "Sprite.hpp" 6#include "Game.hpp" 7 8//標準ヘッダー関係 9#include "stdio.h" 10#include <fstream> 11#include <sstream> 12#include <iostream> 13#include <vector> 14 15//OpenGL関係 16#include "GLEW/include/GL/glew.h" 17#include "gl/GL.h" 18#include "GLFW/include/GLFW/glfw3.h" 19 20//数学ライブラリ 21#include "glm/ext.hpp" 22#include <glm/ext/vector_int2.hpp> 23//文字描画 ライブラリ 24#include <ft2build.h> 25 26//#include FT_FREETYPE_H 27 28 29 30 31 32//class Game; 33class Player 34{ 35public: 36 37 Player(Game* g); 38 ~Player(); 39 40 void Update(); 41 void Draw(); 42 43private: 44 Game* mOwner; 45 46 ////////////////////////////////// 47 struct BulletData* mBullet[10]; 48/////////////////////////////////////////////// 49 50 bool mIsAttack = false; 51 52 53 54 //プレイヤー 55 enum eKeyInput key; //プレイヤーのキー入力 56 57 Sprite* mSprite[4][2]; 58 glm::ivec2 mPosition; //座標 59 glm::ivec2 mVector; //向き 60 61 62 63 int mAnim = 0; //アニメーション管理 64}; 65 66#endif 67
cpp
1#include "Player.hpp" 2#include "Game.hpp" 3 4Player::Player(Game* g) 5{ 6 mOwner = g; 7//////////////////////////////////////////////////////////////////////////// 8 for (int i = 0; i < 10; i++) 9 { 10 mBullet[i] = mOwner->BulletData{ false,glm::ivec2(0,0),glm::ivec2(0,0) }; 11 12 // mBullet[i] = struct BulletData_{ false, glm::ivec2(0, 0), glm::ivec2(0, 0) }; 13 14 } 15///////////////////////////////////////////////////////////////////////////// 16 17 18 //up 19 mSprite[0][0] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(0, 0), glm::ivec2(CELL, CELL)); 20 mSprite[0][1] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 1, 0), glm::ivec2(CELL, CELL)); 21 22 //left 23 mSprite[1][0] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 2, 0), glm::ivec2(CELL, CELL)); 24 mSprite[1][1] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 3, 0), glm::ivec2(CELL, CELL)); 25 26 //down 27 mSprite[2][0] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 4, 0), glm::ivec2(CELL, CELL)); 28 mSprite[2][1] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 5, 0), glm::ivec2(CELL, CELL)); 29 30 //right 31 mSprite[3][0] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 6, 0), glm::ivec2(CELL, CELL)); 32 mSprite[3][1] = new Sprite(mOwner, "Assets/Player.png", glm::ivec2(CELL * 7, 0), glm::ivec2(CELL, CELL)); 33 34 35 36 37} 38 39 40 41void Player::Update() 42{ 43 44} 45 46void Player::Draw() 47{ 48 49} 50 51 52 53 54 55 56Player::~Player() 57{ 58 59} 60
cpp
1#ifndef ___GMAE_H_ 2#define ___GMAE_H_ 3 4#define CELL 48 5 6//画面サイズを指定 7#define WIDTH (16 * 70) 8#define HEIGHT (9 * 70) 9#define PI (3.14159265359f) //円周率 10 11 12#define STAGE_HEIGHT 16 13#define STAGE_WIDTH 23 14 15 16//自作ヘッダー 関係 17#include "Camera.hpp" 18#include "Font.hpp" 19#include "Sprite.hpp" 20 21 22//標準ヘッダー関係 23#include "stdio.h" 24#include <fstream> 25#include <sstream> 26#include <iostream> 27#include <vector> 28 29//OpenGL関係 30#include "GLEW/include/GL/glew.h" 31#include "gl/GL.h" 32#include "GLFW/include/GLFW/glfw3.h" 33 34//数学ライブラリ 35#include "glm/ext.hpp" 36#include <glm/ext/vector_int2.hpp> 37//文字描画 ライブラリ 38#include <ft2build.h> 39//#include FT_FREETYPE_H 40 41 42 43//前方宣言 44class Mesh; 45class Sprite; 46class Font; 47 48class Game 49{ 50public: 51 52 Game(); //コンストラクタ 53 bool Initialization(); //初期化 54 bool RunLoop(); //メインループ 55 void Update(); //計算 56 void GenerateOutput(); //描画 57 58 bool mIsRunLoop; //メインループ 59 void KeyInput(); //キー入力 60 61 62 63 //頂点属性 64 struct VertexAttribute { 65 66 GLfloat Position[3]; //頂点座標 67 GLfloat uv[2]; //UV座標 68 69 }; 70 71 72 73//----------------------------------------------------------------描画オブジェクト 74 75 //キューブ 76 std::vector<Game::VertexAttribute> vertex; //頂点 77 std::vector<unsigned int> vertex_index; //インデックス 78 79 //地面 80 std::vector<Game::VertexAttribute> Ground; //頂点 81 std::vector<unsigned int> Ground_index; //インデックス 82 83 84 85 86 87//----------------------------------------------------------------描画オブジェクト 88////////////////////////////////////////// 89 struct BulletData 90 { 91 bool frag; 92 93 glm::ivec2 pos; //弾の座標 94 glm::ivec2 vec; //弾の飛んでいく向き 95 96 }; 97//////////////////////////////////////// 98 99 Sprite* gBullet[4]; 100 101 enum class eKeyInput 102 { 103 Up, 104 Down, 105 Left, 106 Right, 107 Invalid, 108 }; 109 110 111 //マップ 112 Sprite* Map[100]; 113 114 115 116 int stage[STAGE_HEIGHT][STAGE_WIDTH] = 117 { 118 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 119 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 120 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 121 {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 122 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 123 {0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}, 124 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}, 125 {0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0}, 126 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 127 {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0}, 128 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 129 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 130 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} 131 132 133 134 }; 135 136 137 138 139 140 Font* font; 141 142 143...関係ないので省略 144 145};
どのようなコンパイルエラーが出たのですか?
質問内容を編集しました。
Gameクラスにstruct BulletDataの定義しか書いてないようのですが、メンバ変数は省略部分にあるのでしょうか?あるのでしたらその部分も省略せずに書いてください。
いえ。そのGaneクラスにあるBulletData構造体をPlayerクラスで作りたいということなのでしょすが何が間違えてるのでしょうか?
だとしたら、mOwner->BulletDataの書き方はおかしいですよね。書くならGame::BulletDataとすべきでは?
KoichiSugiyamaさんのコメントに更に付け加えれば、
> mBullet[i] = mOwner->BulletData{ false,glm::ivec2(0,0),glm::ivec2(0,0) };
今、提示の class Player {} 内のmBulletは、struct BulletData* mBullet[10]; と宣言してます。
Playerクラス内で struct BulletData* mBullet[10]; とメンバー変数の宣言はできないはずなのでは。クラスに属さないstruct BulletData構造体があるのですか? fanaさんの回答は、それを示しているのでは? 質問中に載せるために編集したのかもしれませんが、何かちょっと無茶苦茶です。
> //class Game;
というコメントアウトされた行が Player の定義の手前に見えるところから想像するに,何か前方宣言ぎみな記述をしようとした痕跡なのかも? > struct BulletData* mBullet[10];
(内部型を前方宣言できるのかは知りませんが)
回答1件
あなたの回答
tips
プレビュー