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

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

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

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

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

解決済

二重インクルードを回避しているのにも関わらず定義されない理由が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

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

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

2回答

-4評価

0クリップ

1170閲覧

投稿2021/02/19 04:58

以下の提示コードですが以下の提示画像のエラーが発生するのですがなぜでしょうか?全てのヘッダーファイルにインクルードガードを行い
二重インクルードがあるかどうか調べましたがどうしてもわかりません。これはなぜでしょうか?

下記のソース・ファイルは何もインクルードしてません。またライブラリファイルです。

hpp

#include "glm/glm.hpp" #include "dxlib.h" #include "Input.hpp" #include "Collision.hpp"

イメージ説明

hpp

#ifndef ___MAPCHIP_HPP_ #define ___MAPCHIP_HPP_ #include "glm/glm.hpp" #include "dxlib.h" #include "Actor.hpp" #include "Collision.hpp" /*#################################################### * マップチップクラス * * 説明 * ステージのマップチップの情報 ######################################################*/ //ステージのオブジェクトの種別 enum class StageObjectType { None, Enemy, Player, Item, Block, Brick, Shop, }; class MapChip : public Actor { public: MapChip(StageObjectType t,glm::ivec2 pos,glm::ivec2 size,int handle); //コンストラクタ ~MapChip(); //デストラクタ void Update(); //計算 void Draw(); //描画 Box_Collision mCol; private: int mSprite; //スプライト }; #endif

hpp

#ifndef ___BULLET_HPP_ #define ___BULLET_HPP_ #include "DxLib.h" #include "glm/glm.hpp" #include "Actor.hpp" //#include "Entry.hpp" /*#################################################### * バレット(弾) * * 説明 * vectorで管理 * プレイヤーの攻撃 * ######################################################*/ class Bullet : public Actor { public: Bullet(glm::ivec2 pos, glm::ivec2 vec, int handle); //コンストラクタ ~Bullet(); //デストラクタ void Update(); //更新 void Draw(); //描画 private: int mSprite; //スプライト int mSpeed; //バレットの速度 }; #endif

cpp

#ifndef ___PLAYER_HPP_ #define ___PLAYER_HPP_ #include <iostream> #include <vector> //#include "Actor.hpp" //#include "Entry.hpp" #include "Input.hpp" #include "Bullet.hpp" #include "Collision.hpp" #define SPEED 10 /*#################################################### * プレイヤークラス ######################################################*/ //前方宣言 class Bullet; class Player : public Actor { public: Player(Entry* e); //コンストラクタ ~Player(); //デストラクタ void Update(); //更新 void Draw(); //描画 // バレット void Bullet_Update(); //更新 void Bullet_Draw(); //描画 //プレイヤー void Player_Update(); //更新 void Player_Draw(); //描画 bool getIsMenu(); //ショップ画面を開いているかどうか? void setIsMenu(bool b); // メニューを開くかどうか設定 void FixPos(glm::ivec2 pos); //当たり判定で座標を修正 Box_Collision mCol; //当たり判定 private: int mSprite; //プレイヤー スプライト int mBullet_Sprite; //バレット スプライト int mSpeed; //速度 std::shared_ptr<Input> mInput; //キー入力 std::vector<Bullet> mBullet; //バレット bool mMenu; //ショップ画面を開くかどうか? }; #endif

hpp

#ifndef ___ACTOR_HPP_ #define ___ACTOR_HPP_ #include "glm/glm.hpp" #include "dxlib.h" #include "Entry.hpp" /*#################################################### * アクター * * 説明 * 全てのゲームオブジェクトはこれを継承する。 ######################################################*/ class Actor { public: Actor(Entry* e,glm::ivec2 pos = glm::ivec2(0, 0), glm::ivec2 vec = glm::ivec2(0, 0)); //コンストラクタ ~Actor(); //デストラクタ void virtual Update() = 0; //計算 void virtual Draw() = 0; //描画 //取得関係 glm::ivec2 getVector(); //方向 glm::ivec2 getPosition(); //座標 protected: glm::ivec2 mPosition; //座標 glm::ivec2 mVector; //方向 glm::ivec2 mSize; //スプライトのサイズ Entry* Owner; //Entry クラス }; #endif

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/02/19 05:21

いえ、治りません、#include "Entry.hpp"部にある#define ありませんと表示されます。
int32_t

2021/02/19 05:24

それは必要なファイルに「#include "Entry.hpp"」を足せばよいです。 「#include "Actor.hpp"しているのに class Actor がないと言われる」という問題が解消するかどうかを知りたいです。
退会済みユーザー

退会済みユーザー

2021/02/19 05:26

治りましたが何が原因なのでしょうか?今だにちょっとわかりません。
fana

2021/02/19 07:22

質問内容とは関係ないですが, ___ACTOR_HPP_ みたいな名前は予約されているので使っちゃダメ,というルールあります. (「C C++ アンダーバー 予約」とかなんとか検索すればそういう話を見つけられるかと.)

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C++

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

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。