クラスの中でメソッドの引数としてクラスを使うには?

解決


Nightz  2005-06-16 10:46:41  No: 57916

またまた変なとこでつまづいたので・・教えて下さい!!!
/***** 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); としています
それでは、ご教授よろしくお願いします


Nightz  2005-06-16 21:57:13  No: 57917

すいません  自己解決しました。
原因はCMyChar.hで#include "CMyWeapon.h"をしていたことでした・・・


YuO  2005-06-17 00:10:20  No: 57918

解決となっていますが……。

CMyCharの実装が,クラスの定義時に不要であれば (=CMyChar型のメンバ変数がなければ),
#include "CMyChar.h"
のかわりに
class CMyChar;
としておくことで,CMyWeaponクラスを定義できます。


Nightz  2005-06-19 02:23:05  No: 57919

レスが遅くなってすいません。  レスを頂いてたんですねw
あ  そうなんですか・・  クラスは奥が深いですね。
なかなか構造体のようにうまく扱うことができませんw

あと小さい質問なのでこのまま書かせて頂きますが
ワークスペースの順番は変えることができるのでしょうか?
CEnemy.cppがCMyChar.cppより上に来てるので・・
ドラッグしてもダメみたいですしいい方法がありましたら教えて下さい!


Ban  2005-06-19 09:11:32  No: 57920

> あ  そうなんですか・・  クラスは奥が深いですね。
> なかなか構造体のようにうまく扱うことができませんw

クラス固有の機能ではなく、構造体でも可能なものです。

C++ のクラスは、実は構造体とほぼ一緒です。
構造体にもコンストラクタがかけますし、private:などの指定も出来ます。
基本的に、クラスに出来ることは構造体にも、
構造体にできることはクラスにも出来ます。

# あくまで C++ の場合。互換性のない言語もあります。


PATIO  2005-06-22 03:55:13  No: 57921

>ワークスペースの順番は変えることができるのでしょうか?
>CEnemy.cppがCMyChar.cppより上に来てるので・・
>ドラッグしてもダメみたいですしいい方法がありましたら教えて下さい!

あの部分は単純に文字コード順にソートされているだけではないかな。
多分、並び替えは出来ないと思います。
並び順は気にしない方が吉かと。
単に見つけやすいようにソートされているだけでしょうし。


Nightz  2005-06-22 07:49:25  No: 57922

>>Banさん  
なるほど  でも解りづらくなりそうで・・実用性はあまりなさそうですね

>>PATIOさん  
レスありがとうございます  うーん・・・残念!!


Nightz  2005-06-27 21:23:28  No: 57923

またまた小さな質問をさせて下さい
また同じような症状(クラスのシンタックスエラー)になったのでinclude順を変えようと思いました
しかしながら両方とも
CEnemy.hでは CMyWeapon.hをincludeしてますし
CMyWeapon.hでは CEnemy.hをincludeしています
どうしてもincludeじゃダメのようなので
CEnemy.hで YuOさんから教えて頂いたclass CMyWeapon;を宣言?するという形でエラーをとることができました
ここでclass CMyWeaponを宣言?するということはどういったことを意味してるんでしょうか?  (使わなくてもいいんですかね?、デストラクタで解放するようにするんですかね?)
あと  「include」より「class クラス名」  とする方がよく使われるんでしょうか?
include順によるこういったエラー発生が多いのでご教授お願いします


YuO  2005-06-27 21:48:29  No: 57924

[解決]とした後に新しい質問をする場合は,新しいトピックとした方がよいです。
# 新たな質問が解決されたかどうかが,メイン画面からわかりにくいから。

> ここでclass CMyWeaponを宣言?するということはどういったことを意味してるんでしょうか?  (使わなくてもいいんですかね?、デストラクタで解放するようにするんですかね?)

class CMyWeapon;
という宣言は,
・CMyWeaponという名前の識別子が存在することをコンパイラに提示する
・CMyWeaponはクラスであることをコンパイラに提示する
という意味があります。
# 詳しいことはCやC++の本を参照して下さい。

あくまで存在を知らせるものですから,デストラクタも何も関係ありませんし,使わなくてもいいです。

> あと  「include」より「class クラス名」  とする方がよく使われるんでしょうか?

ヘッダファイルが循環して参照している場合はそうせざるを得ません。
ヘッダファイルが循環していない場合は,
クラスの定義ごと#includeで読み込んでしまう場合が多いと思います。


Nightz  2005-06-27 22:09:51  No: 57925

そうですね  次から新しいトピックを作ることにします

>・CMyWeaponという名前の識別子が存在することをコンパイラに提示する
・CMyWeaponはクラスであることをコンパイラに提示する
という意味があります。
あくまで存在を知らせるものですから,デストラクタも何も関係ありませんし,使わなくてもいいです。

なるほどありがとうございます  includeしかしたことがなかったので知りませんでした

>ヘッダファイルが循環して参照している場合はそうせざるを得ません。
ヘッダファイルが循環していない場合は,
クラスの定義ごと#includeで読み込んでしまう場合が多いと思います

解りました  親切丁寧にありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加