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

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

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

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

解決済

構造体が未定義と表示されるエラーの解決方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

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

2回答

-3評価

0クリップ

1742閲覧

投稿2021/02/03 06:12

編集2021/02/04 04:11

提示コードのStage.hpp部でBlock.hppをインクルードすると以下の提示画像のエラーが発生します。また**Block.hppのインクルードをコメントアウトすると正常にコンパイル出来ます。**これはどうしてでしょうか? 全てのヘッダーにインクルードガードを実装してすべてソースファイルも定義しています。なぜなのでしょうか?

glmはglmライブラリです。

イメージ説明

// MapChip.hpp #define ___MAPCHIP_HPP_ #include <iostream> #include "glm/glm.hpp" // 自作 関係 #include "../LoadTexture.hpp" #include "../Collision.hpp" #include "../Actor_2D.hpp" #include "../Sprite.hpp" /*#################################################### * マップチップ 描画クラス ######################################################*/ class Sprite; struct TextureData; class MapChip : public Actor_2D { public: MapChip(Entry* e, std::shared_ptr<TextureData> data, glm::ivec2 pos, TextureUV size, bool col); // MapChip(); // MapChip(const MapChip& m); // ~MapChip(); // void Update() override; void Draw() override; Box_Collision_2D mCol; private: std::shared_ptr<Sprite> mSprite; std::shared_ptr<TextureData> Data; TextureUV UV; glm::ivec2 colSize; }; #endif
//Block.hpp #ifndef ___BLOCK_HPP #define ___BLOCK_HPP #include "../Actor_2D.hpp" #include "../Entry.hpp" #include "../LoadTexture.hpp" #include "MapChip.hpp" class Block : public Actor_2D { public: Block(Entry* e, std::shared_ptr<TextureData> data, TextureUV uv, glm::ivec2 pos); ~Block(); void Update() override; void Draw() override; std::vector<MapChip> block; }; #endif
//Stage.hpp #ifndef ___STAGE_HPP_ #define ___STAGE_HPP_ #include <glm/glm.hpp> #include <iostream> #include <vector> #include "Block.hpp" class Stage { public: Stage(Entry * e); //コンストラクタ ~Stage(); //デストラクタ void Update(); void Draw(); private: std::vector<Block> block; class Entry* Owner; }; #endif

hpp

//LoadTexture.hpp #ifndef ___TEXTURE_HPP_ #define ___TEXTURE_HPP_ #include "Entry.hpp" #include "glm/glm.hpp" typedef unsigned char Byte; // Byte #include <vector> #include <iostream> // 描画UV座標を指定 typedef struct TextureUV { glm::vec2 start; glm::vec2 end; }TextureUV; // テクスチャデータ typedef struct TextureData { std::shared_ptr<std::vector<Byte>> mData; //画像データ glm::ivec2 mSize; //サイズ int channels; //チャンネル数 }TextureData; //画像ファイルのバイナリを返す。  std::shared_ptr<TextureData> LoadTexture(const char* FileName); int getTextureChannel(const char* str); glm::vec4 getRGBAColor(int r, int g, int b, int a); #endif
//Entry.hpp #ifndef ___ENTRY_H_ #define ___ENTRY_H_ #define SCREEN_WIDTH ((float)(16.0f * 60.0f)) //画面の横 #define SCREEN_HEIGHT ((float)(9.0f * 60.0f)) //画面の縦 #define PI ((float)3.14159265359f) //円周率 //自作ヘッダー 関係 #include "Camera.hpp" #include "Text.hpp" #include "Sprite.hpp" #include "Input.hpp" //#include "Sound.hpp" //#include "LoadTexture.hpp" //#include "Rectangle.hpp" //#include "Circle.hpp" #include "Actor_2D.hpp" // テスト 関係 #include "../Header/Game/Scene.hpp" //標準ヘッダー関係 #include "stdio.h" #include <iostream> #include <vector> #include <time.h> #include <random> //OpenGL関係 #include <GLEW/include/GL/glew.h> #include <gl/GL.h> #include <GLFW/include/GLFW/glfw3.h> //OpenAL関係 #include <OpenAL/include/al.h> #include <OpenAL/include/alc.h> //OpenCV 関係 #include <opencv2/opencv.hpp> //数学ライブラリ #include "glm/ext.hpp" /*############################################################################################################### # GLmain  #################################################################################################################*/ class Entry { public: Entry(); //コンストラクタ ~Entry(); //デスストラクタ bool Initialization(); //初期化 bool RunLoop(); //メインループ void Update(); //計算 void GenerateOutput(); //描画 GLFWwindow* GL_Window = nullptr; //OpenGLコンテキスト ALCdevice* AL_Device = nullptr; //デバイス ALCcontext* AL_Context = nullptr; //コンテキスト glm::ivec2 getWindowSize(); //画面サイズを取得 private: // #################################################################################################################################################################### std::unique_ptr<class Input> mInput; std::unique_ptr<class Scene> scene; // bool mIsRunLoop; //メインループ void ExitEntryKey(); //ゲーム終了 }; #endif

hpp

//Sprite.hpp #ifndef ___SPRITE_HPP_ #define ___SPRITE_HPP_ //自作ヘッダー #include "Transform_2D.hpp" #include "Shader.hpp" #include "VertexData.hpp" #include "LoadTexture.hpp" //標準ヘッダー関係 #include "stdio.h" #include <fstream> #include <sstream> #include <iostream> #include <vector> #include <crtdbg.h> //OpenGL関係 #include "GLEW/include/GL/glew.h" #include "gl/GL.h" #include "GLFW/include/GLFW/glfw3.h" // OpenCV #include "opencv2/opencv.hpp" //数学ライブラリ #include "glm/ext.hpp" #include "glm/glm.hpp" //#include "Entry.hpp" /*############################################################################################################### # スプライト描画 #################################################################################################################*/ class Entry; struct TextureData; class Sprite : public Transform_2D { public: Sprite(class Entry* g, std::shared_ptr<TextureData> sp); //コンストラクタ ~Sprite(); //デストラクタ Sprite(const Sprite& sp); //コピーコンストラクタ void DrawGraph(glm::ivec2 pos,glm::vec2 start,glm::vec2 end); // glm::vec2 getSize(); private: VertexAttribute_2D vertex[6]; //頂点データ class Entry* Entry; //Entry クラス glm::vec2 mPicSize; //画像サイズ //OpenGL 関係 GLuint VAO; GLuint VBO; GLuint IBO; GLuint TextureID; //テクスチャID std::shared_ptr<class Shader> shader; //シェーダープログラム class Entry *Owner;//Entryクラス }; #endif;

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

int32_t

2021/02/03 08:59

Entry.hpp, glm.hpp, Collision.hpp, Actor_2D.hpp, Sprite.hpp など、include されるファイルをすべて開示してください。
t_obara

2021/02/03 10:05

エラーは「MapChip.hpp 37」としていますが、提示されたコードはMapChip.cppです。hppファイルがあるのですか?あるのであれば、そちらに問題があるのでは?もしcppしか無いのであれば、きちんと最新の状態にして、プロジェクトを作り直すなどして、再度コンパイルしてエラーをご提示ください。
t_obara

2021/02/03 15:04

循環参照しているのでは?
int32_t

2021/02/03 15:05

何のソースファイル(*.cpp)をコンパイルしたときにエラーが出るのかも重要です。必要なファイルをすべて開示しないと解決しませんよ。
thkana

2021/02/04 04:03

> 以下の提示インクルードコードは流石に関係ないので載せません それでは、代わりに回答者が実際にコンパイルを試みてエラーの有無を確認できるコードを提示してください。
退会済みユーザー

退会済みユーザー

2021/02/04 05:19

文章を修正しました。
int32_t

2021/02/04 06:36

やはり、ヘッダ内で #include しているヘッダのすべてを見ないと原因はわからないですね。Entry.hpp から Block.hpp を (間接的に) #include していれば説明がつくのですけど。
yumetodo

2021/02/04 14:42

そもそも論として__を含んだり、_[A-Z]を含む識別子は予約されているのでマクロでも使ってはいけないはず・・・。
yohhoy

2021/02/05 01:13

FYI: 解決済みのようですが関連参考情報として。極稀に(差分)ビルドでは問題解決せず、いったん全ての中間ファイルをクリーンアップ&フルビルドをかけるとうまくいくケースもあります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C++

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