ヘッダをインクルードするとエラーが出てしまう
Posted: 2010年5月16日(日) 21:05
こんにちわ。どうしてもわからないエラーがあるのでよろしくお願いします。
環境
Windows XP Professional
Visual Studio 2005
・やろうとしていること
クラスAのメンバのクラスBのポインタを、
グローバル変数として用意したい。
・困ってること
クラスBが宣言されているヘッダファイルを
グローバル変数用のヘッダファイルでインクルードしようとすると、
エラーが発生する。
//----------------------------------------------------------------------------
・詳細です
ファイルは以下の様な構成でヘッダファイル3つと、ソースファイル3つです。
global.h //グローバル変数のextern宣言
global.cpp //グローバル変数の実体
main.h //MainControlクラスの宣言
main.cpp //MainControlクラスの内容
sub.h //SubControlクラスの宣言
sub.cpp //SubControlクラスの内容
SubControlクラスはMainControlクラスのメンバとして使用しています。
class MainControl{
private:
SubControlsubcnt;
}
また、global.h を main.h と sub.h でインクルードしています。
※global.h にはSTLのvectorを利用するために #include <vector> の記述があります。
ここで、 global.h と global.cpp に SubControlクラスのポインタを用意するために、
global.h の中で sub.h をインクルードすると、main.cpp のコンパイル中に下記のように
エラーがでてしまいます。
//-----------------------------------------------------------------------------
sub.h(同じ行) : error C2143: 構文エラー : ';' が '<' の前にありません。
sub.h(同じ行) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
sub.h(同じ行) : error C2238: ';' の前に無効なトークンがあります。
//-----------------------------------------------------------------------------
'<'は vector<構造体> 変数名 ・・・の部分の<です。
なぜかvectorが型として認識されていないようです。
エラーが発生する状況としては sub.h に global.h をインクルードする記述があり、
さらに global.h に sub.h をインクルードする記述があると、
このようなエラーが発生するようなのですが、
なぜエラーになってしまうのでしょうか?
関係あるかどうか分かりませんが、ヘッダファイルは、全て複数回読込を防ぐために、
#ifndef xxx
#define xxx
#endif
を記述しています。
また、各ヘッダファイルがインクルードしているものは次の通りです。
global.h
#include "DxLib.h"
#include <vector>
#include "frame.h"
main.h
#include "global.h"
#include "sub.h"
sub.h
#include "global.h"
環境
Windows XP Professional
Visual Studio 2005
・やろうとしていること
クラスAのメンバのクラスBのポインタを、
グローバル変数として用意したい。
・困ってること
クラスBが宣言されているヘッダファイルを
グローバル変数用のヘッダファイルでインクルードしようとすると、
エラーが発生する。
//----------------------------------------------------------------------------
・詳細です
ファイルは以下の様な構成でヘッダファイル3つと、ソースファイル3つです。
global.h //グローバル変数のextern宣言
global.cpp //グローバル変数の実体
main.h //MainControlクラスの宣言
main.cpp //MainControlクラスの内容
sub.h //SubControlクラスの宣言
sub.cpp //SubControlクラスの内容
SubControlクラスはMainControlクラスのメンバとして使用しています。
class MainControl{
private:
SubControlsubcnt;
}
また、global.h を main.h と sub.h でインクルードしています。
※global.h にはSTLのvectorを利用するために #include <vector> の記述があります。
ここで、 global.h と global.cpp に SubControlクラスのポインタを用意するために、
global.h の中で sub.h をインクルードすると、main.cpp のコンパイル中に下記のように
エラーがでてしまいます。
//-----------------------------------------------------------------------------
sub.h(同じ行) : error C2143: 構文エラー : ';' が '<' の前にありません。
sub.h(同じ行) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
sub.h(同じ行) : error C2238: ';' の前に無効なトークンがあります。
//-----------------------------------------------------------------------------
'<'は vector<構造体> 変数名 ・・・の部分の<です。
なぜかvectorが型として認識されていないようです。
エラーが発生する状況としては sub.h に global.h をインクルードする記述があり、
さらに global.h に sub.h をインクルードする記述があると、
このようなエラーが発生するようなのですが、
なぜエラーになってしまうのでしょうか?
関係あるかどうか分かりませんが、ヘッダファイルは、全て複数回読込を防ぐために、
#ifndef xxx
#define xxx
#endif
を記述しています。
また、各ヘッダファイルがインクルードしているものは次の通りです。
global.h
#include "DxLib.h"
#include <vector>
#include "frame.h"
main.h
#include "global.h"
#include "sub.h"
sub.h
#include "global.h"