またまた変なとこでつまづいたので・・教えて下さい!!!
/***** MyWeapon.h ********/
#include <d3d9.h>
#include <d3dx9.h>
#include "Global.h"
#include "CMyChar.h"
class CMyWeapon
{
public:
CMyWeapon(); //コンストラクタ
virtual ~CMyWeapon(); //デストラクタ
〜変数宣言がダラダラと〜
void Init(); //●初期化●
void Process(CMyChar& rMyChar); //★メイン処理★
};
という感じで作っているのですが
このProcessのCMyCharでエラーが出てしまいます。
エラーメッセージは
[: error C2061: 構文エラー : 識別子 'CMyChar' がシンタックスエラーを起こしました。]
です
ちゃんとCMyChar.hを読み込んでるんですが何故シンタックスエラーなんでしょう。。
ちなみに呼び出し部は rMyWeapon.Process(rMyChar); としています
それでは、ご教授よろしくお願いします
すいません 自己解決しました。
原因はCMyChar.hで#include "CMyWeapon.h"をしていたことでした・・・
解決となっていますが……。
CMyCharの実装が,クラスの定義時に不要であれば (=CMyChar型のメンバ変数がなければ),
#include "CMyChar.h"
のかわりに
class CMyChar;
としておくことで,CMyWeaponクラスを定義できます。
レスが遅くなってすいません。 レスを頂いてたんですねw
あ そうなんですか・・ クラスは奥が深いですね。
なかなか構造体のようにうまく扱うことができませんw
あと小さい質問なのでこのまま書かせて頂きますが
ワークスペースの順番は変えることができるのでしょうか?
CEnemy.cppがCMyChar.cppより上に来てるので・・
ドラッグしてもダメみたいですしいい方法がありましたら教えて下さい!
> あ そうなんですか・・ クラスは奥が深いですね。
> なかなか構造体のようにうまく扱うことができませんw
クラス固有の機能ではなく、構造体でも可能なものです。
C++ のクラスは、実は構造体とほぼ一緒です。
構造体にもコンストラクタがかけますし、private:などの指定も出来ます。
基本的に、クラスに出来ることは構造体にも、
構造体にできることはクラスにも出来ます。
# あくまで C++ の場合。互換性のない言語もあります。
>ワークスペースの順番は変えることができるのでしょうか?
>CEnemy.cppがCMyChar.cppより上に来てるので・・
>ドラッグしてもダメみたいですしいい方法がありましたら教えて下さい!
あの部分は単純に文字コード順にソートされているだけではないかな。
多分、並び替えは出来ないと思います。
並び順は気にしない方が吉かと。
単に見つけやすいようにソートされているだけでしょうし。
>>Banさん
なるほど でも解りづらくなりそうで・・実用性はあまりなさそうですね
>>PATIOさん
レスありがとうございます うーん・・・残念!!
またまた小さな質問をさせて下さい
また同じような症状(クラスのシンタックスエラー)になったのでinclude順を変えようと思いました
しかしながら両方とも
CEnemy.hでは CMyWeapon.hをincludeしてますし
CMyWeapon.hでは CEnemy.hをincludeしています
どうしてもincludeじゃダメのようなので
CEnemy.hで YuOさんから教えて頂いたclass CMyWeapon;を宣言?するという形でエラーをとることができました
ここでclass CMyWeaponを宣言?するということはどういったことを意味してるんでしょうか? (使わなくてもいいんですかね?、デストラクタで解放するようにするんですかね?)
あと 「include」より「class クラス名」 とする方がよく使われるんでしょうか?
include順によるこういったエラー発生が多いのでご教授お願いします
[解決]とした後に新しい質問をする場合は,新しいトピックとした方がよいです。
# 新たな質問が解決されたかどうかが,メイン画面からわかりにくいから。
> ここでclass CMyWeaponを宣言?するということはどういったことを意味してるんでしょうか? (使わなくてもいいんですかね?、デストラクタで解放するようにするんですかね?)
class CMyWeapon;
という宣言は,
・CMyWeaponという名前の識別子が存在することをコンパイラに提示する
・CMyWeaponはクラスであることをコンパイラに提示する
という意味があります。
# 詳しいことはCやC++の本を参照して下さい。
あくまで存在を知らせるものですから,デストラクタも何も関係ありませんし,使わなくてもいいです。
> あと 「include」より「class クラス名」 とする方がよく使われるんでしょうか?
ヘッダファイルが循環して参照している場合はそうせざるを得ません。
ヘッダファイルが循環していない場合は,
クラスの定義ごと#includeで読み込んでしまう場合が多いと思います。
そうですね 次から新しいトピックを作ることにします
>・CMyWeaponという名前の識別子が存在することをコンパイラに提示する
・CMyWeaponはクラスであることをコンパイラに提示する
という意味があります。
あくまで存在を知らせるものですから,デストラクタも何も関係ありませんし,使わなくてもいいです。
なるほどありがとうございます includeしかしたことがなかったので知りませんでした
>ヘッダファイルが循環して参照している場合はそうせざるを得ません。
ヘッダファイルが循環していない場合は,
クラスの定義ごと#includeで読み込んでしまう場合が多いと思います
解りました 親切丁寧にありがとうございました
ツイート | ![]() |