• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラスが認識されていない(VC++))

クラスが認識されていない(VC++)

このQ&Aのポイント
  • WinXP、VC++6.0のMFCでダイアログベースのプログラムで、クラスRedのメンバ関数FuncRed()の中でクラスBlueのオブジェクトを使おうとすると「左側がクラス、構造体、共用体ではありません。」というエラーが出ます。
  • クラスRedのメンバにクラスBlueのオブジェクトを入れた場合に、FuncRed()の中でobj_blueを使うとエラーが出ますが、FuncRed()の中でクラスBlueのオブジェクトobj_blue2を作って使うとエラーが出ずに使えます。
  • この現象で悩んでいるので、解決方法についてアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

メンバ関数の追加をClassViewから行ったときと、手書きで入力したときの差はないと思います。 メンバ関数の追加をClassViewから行うときは、アクセス制御で (1)Public (2)Protected (3)Private のいずれかが選択でき、選択したアクセス制御で関数が宣言されます。 C++では、classのメンバ関数はデフォルトではprivateで宣言されています。 例えば、 class Blue{ { void FuncBlue(); } のように記述したとき、FuncBlue()メンバ関数はprivateです。 それに対して、メンバ関数の追加をClassViewから行うときは、アクセス制御のデフォルトはPublicになっています。 従って、アクセス制御をデフォルトのままClassViewからメンバ関数を追加すると、 class Blue{ { public: void FuncBlue(); } のようなコードが作成されます。 この場合、当然FuncBlue()メンバ関数はpublicです。 もしかしたらその辺が関係していたんじゃないでしょうか?

_comcom
質問者

お礼

どうもありがとうございます。 僕の勘違いみたいでした。 非常に参考になりました。

その他の回答 (1)

回答No.1

obj_blueを使ったときのスペルミス(例:objblueなど)はないでしょうか? チェックしてみてください。 それでも解決しないときは、obj_blueを使うところあたりのコードを書いてもらえないでしょうか?

_comcom
質問者

お礼

ありがとうございます。 いろいろいじくっている内に解決しました。 原因はRedのメンバ関数をウィザードを使わず直接手書きで付け加えていたところにあったみたいです。 ただ、新たな疑問が生じたのですが、手書きでメンバ関数を追加した場合とウィザードで追加した場合ではソースコード自体は同じはずですがどこが違うのでしょうか? 素人くさくてすいません。お時間あればどうか。

関連するQ&A