- ベストアンサー
クラスが認識されていない(VC++)
- WinXP、VC++6.0のMFCでダイアログベースのプログラムで、クラスRedのメンバ関数FuncRed()の中でクラスBlueのオブジェクトを使おうとすると「左側がクラス、構造体、共用体ではありません。」というエラーが出ます。
- クラスRedのメンバにクラスBlueのオブジェクトを入れた場合に、FuncRed()の中でobj_blueを使うとエラーが出ますが、FuncRed()の中でクラスBlueのオブジェクトobj_blue2を作って使うとエラーが出ずに使えます。
- この現象で悩んでいるので、解決方法についてアドバイスをお願いします。
- みんなの回答 (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です。 もしかしたらその辺が関係していたんじゃないでしょうか?
その他の回答 (1)
- miswaki777
- ベストアンサー率47% (11/23)
obj_blueを使ったときのスペルミス(例:objblueなど)はないでしょうか? チェックしてみてください。 それでも解決しないときは、obj_blueを使うところあたりのコードを書いてもらえないでしょうか?
お礼
ありがとうございます。 いろいろいじくっている内に解決しました。 原因はRedのメンバ関数をウィザードを使わず直接手書きで付け加えていたところにあったみたいです。 ただ、新たな疑問が生じたのですが、手書きでメンバ関数を追加した場合とウィザードで追加した場合ではソースコード自体は同じはずですがどこが違うのでしょうか? 素人くさくてすいません。お時間あればどうか。
お礼
どうもありがとうございます。 僕の勘違いみたいでした。 非常に参考になりました。