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

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

新規登録して質問してみよう
ただいま回答率
85.35%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

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

Q&A

解決済

1回答

2609閲覧

C++で、別ファイルに定義したクラスの変数を宣言すると、C4430を吐く

gRivXOzYyYyDl1W

総合スコア20

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

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

0グッド

0クリップ

投稿2020/05/16 15:38

編集2020/05/16 16:10

別ファイルに定義したField_Objectというクラス(ポインタ)の変数を宣言すると、エラーC4430(型指定子がありません)を吐きます。
vectorと配列で宣言しているのですが、using namespace std;を入れることによってvectorでの宣言ではエラーを吐きませんでした。
原因が分からずに困っております。
どうかご教授願います。

環境はVisual Studio Community2017を使用しており、最初フィルターでファイルを区別していたのですが、途中からフォルダで区別するように変えました。おそらくそこを境にこのようなエラーが吐き出されるようになりました。(インクルードディレクトリも確認しましたが、特に問題なさそうです)

追記:
いろいろ触って気づいたのですが、「このエラーを吐きだしているファイル(Battle_State.h)を他のどのファイルも参照しない」場合、エラーが消えます。ただ、原因が分からない上、他のファイルでBattle_State.hを参照することはどうしても必要になります。こうなる原因、解決法のご教授お願い致します。

以下コードです。

Battle_State.h ---------------------------------------------------- #pragma once #include "DXLib_Orig.h" //Field_Objectを定義 #include "Shape.h" using namespace std; using namespace DX_Lib; //DXLib_Origの名前空間 (#define width 3 //別のファイルで宣言しています) (#define length 3 //別のファイルで宣言しています) #define SIZE 2.f #define Player_Location 1.f #define Side_Location 1.f #define Enemy_Location Player_Location+(3.f*SIZE) class Game_State { public: virtual Game_State* Update() { return NULL; } virtual void Draw() {}; }; class Battle_State :public Game_State { public: vector<Field_Object*> objects;//using namespace std;を入れるとなぜか通る vector<Field_Object*> secure_objects;//上に同じ Field_Object* Panel_ALL[6][6];//C4300 Field_Object* Player_Panel[width][length];//C4300 Field_Object* Enemy_Panel[width][length];//C4300 public: Battle_State(); ~Battle_State(); void Draw() override Game_State* Update() override; };
class Field_Object DirectXを使用 ---------------------------------------------------- class Field_Object { public: Field_Object() {}; Field_Object(float x, float y, float depth); ~Field_Object() {}; public: virtual void Update() {}; virtual void Draw() {}; void Move(float x, float y, float z); void Move(float x, float y); D3DXVECTOR3* Get_Location(); protected: D3DXVECTOR3 pos; D3DXMATRIX loc; private: D3DXVECTOR3 move_vector; };

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/05/16 15:52

Field_Objectの定義を提示しましょう
guest

回答1

0

自己解決

原因は、Field_Objectを定義しているファイル"DXLib_Orig.h"でBattle_State.hなどをインクルードしていたことが原因でした。どこかのサイトでコンパイルの順番によるエラーの回避として、それが書かれていたのでそ真似してたっぽいです。

投稿2020/05/16 16:37

gRivXOzYyYyDl1W

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問