下記のGame_Scene クラスのインクルードですがなぜstage.hppをインクルードするとstageクラス内の#define つまりEntry.hpp関係が読み込まれないのでしょうか?ヘッダーファイルが衝突していると思いEntry.hppをコメントアウトしてStage.hppをインクルードしたり前方宣言やら色々試しましたがわかりません。どうすればいいのでしょうか?
hpp
1#ifndef ___STAGE_HPP_ 2#define ___STAGE_HPP_ 3 4#include "Entry.hpp" 5 6/*#################################################### 7* エディットするステージを描画 8* 9* 説明 10* 11* 12######################################################*/ 13 14class Stage 15{ 16public: 17 Stage(); //コンストラクタ 18 ~Stage(); //デストラクタ 19 20 void Update(); //計算 21 void Draw(); //描画 22 23private: 24 25 26 byte mGame_Stage[ STAGE_GRID_Y ][ STAGE_GRID_X ]; //ステージ 27}; 28 29 30#endif
hpp
1#ifndef ___GAME_SCENE_HPP_ 2#define ___GAME_SCENE_HPP_ 3 4#include "Scene_base.hpp" 5//#include "Entry.hpp" 6#include "Stage.hpp" 7 8 9enum class Scene_Type; 10class Stage; 11/*#################################################### 12* メインゲーム シーン 13* 14* 説明 15* メインのゲーム画面 16######################################################*/ 17class Game_Scene : public Scene_base 18{ 19public: 20 Game_Scene(Scene_Type t,Entry* e); //コンストラクタ 21 ~Game_Scene(); //デストラクタ 22 23 void Update(); //更新 24 void Draw(); //描画 25 26private: 27 28 29 30 std::shared_ptr<Stage> stage; 31 32 Entry* Owner; //Entry クラス 33 34}; 35 36#endif 37
hpp
1#ifndef ___ENTRY_HPP_ 2#define ___ENTRY_HPP_ 3 4 5 6#include "Game_Scene.hpp" 7#include "Input.hpp" 8#include <iostream> 9class Game_Scene; 10 11 12 13#define CELL ((int)48) //セル 14 15#define byte unsigned char //バイト 16 17//画面サイズ 18#define SCREEN_WIDTH ((int)16 * 70) 19#define SCREEN_HEIGHT ((int)9 * 70) 20 21//ステージ 22#define STAGE_WIDTH ((int)100 * CELL) 23#define STAGE_HEIGHT ((int)100 * CELL) 24 25//ステージのセル数 26#define STAGE_GRID_X ((int)(STAGE_WIDTH / CELL)) 27#define STAGE_GRID_Y ((int)(STAGE_HEIGHT / CELL)) 28 29//方向 30#define VECTOR_UP glm::ivec2(0,-1) 31#define VECTOR_DOWN glm::ivec2(0,1) 32#define VECTOR_LEFT glm::ivec2(-1,0) 33#define VECTOR_RIGHT glm::ivec2(1,0) 34 35#define PI ((float)3.14159265359) //PI 36 37 38 39// シーンの種類 40enum class Scene_Type 41{ 42 Title, //タイトル 43 Game, //メインゲーム 44 GameOver, //ゲームオーバー 45 46 47 Menu, //メニュー 48 Pause, //一時停止 49}; 50 51 52 53/*#################################################### 54* シーン推移 55* 56* 説明 57* シーンの推移を行う 58######################################################*/ 59class Entry 60{ 61public: 62 63 Entry(); //コンストラクタ 64 ~Entry(); //デストラクタ 65 66 void Update(); //計算 67 void Draw(); //描画 68 int GetRand(int start, int end); //乱数を取得 69 70 int LoadSprite(const char* FileName); //スプライトをロード 71 72 73 std::shared_ptr<Input> InputKey; 74 75private: 76 77 std::shared_ptr<Game_Scene> game; 78 79 Scene_Type type; 80 81}; 82 83 84#endif 85 86
hpp
1#ifndef ___SCENE_BASE_HPP_ 2#define ___SCENE_BASE_HPP_ 3 4#include <iostream> 5#include <vector> 6 7class Entry; 8enum class Scene_Type; 9 10/*#################################################### 11* シーンの基底クラス 12* 13* 説明 14* 全てのシーンクラスはこのクラスを継承する。 15######################################################*/ 16class Scene_base 17{ 18public: 19 Scene_base(Scene_Type t,Entry* e); //コンストラクタ 20 ~Scene_base(); //デストラクタ 21 22 virtual void Update() = 0; //更新 23 virtual void Draw() = 0; //描画 24 25 Scene_Type getSceneType(); //シーンタイプを取得 26protected: 27 28 Scene_Type Type; //シーンタイプ 29 Entry* Owner; //Entry クラス 30 31}; 32 33 34#endif 35
忘却の彼方だし、素人の考えで笑われるかもしれませんけどヘッダファイルに #ifndef #define#endifするけどそこに書くのはクラスで cpp側で#includeすればいいんじゃないの
ポインタの扱いがよくわかんなくて避けてるけど誰か助けて。
どういう意味でしょうか?
.cpp側でインクルードすればよくてヘッダ側でインクルードしてるからおかしいのかなと思った。過去に書いた資料みてみてそうかなと思った。
ソースファイル側でインクルードするのは正しいのでしょうか?
私はそうしてるけどそんなんで問題解消するか知らない
書き込みがなくなったので、どうなったのか気にしてます。
また、今回のコメント欄に貼ったコメントは
参考にしないでください。
回答1件
あなたの回答
tips
プレビュー