- ベストアンサー
Visual C++ 2005 MFCアプリのクラス作成について
Windows XP SP3 Visual C++ 2005 pro MFCアプリケーション シングルドキュメント 以上の環境でアプリケーションを作りたいと思っています。 C++は、C言語をベースという意味ではそれなりにはわかっているつもりです(自信はないですが...)。 本当はSDKを学んだ方がよろしいんでしょうが、時間の都合上MFCでやることにしました。 ちなみに、VC++を使ったプログラミングは初めてのものです。 そこで質問なのですが、 通常のC++においてクラスを作るときは、cppファイルとhファイルで分けてつくってmainのcppでインクルードしますよね。 VC++ MFCも 「C++クラスの追加」 でウィザードを利用してあるクラスAを作成てみまして、わかる方にはわかるでしょうけど、もちろん以下のように出力されました。 A.h------------------ #pragma once class A { public: A(void); public: ~A(void); }; A.cpp---------------------- #include "A.h" #include "StdAfx.h" A::A(void) { } A::~A(void) { } そしてとりあえず、その状態で何も手を加えずにとりあえずコンパイルにかけてみたところいきなり以下のようなエラーが出ました。 error C2653: 'A' :識別子がクラス名でも名前空間名でもありません。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません warning C4508: 'A' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 error C2653: 'A' : 識別子がクラス名でも名前空間名でもありません fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します 何も手を加えていない状態でこのようなエラーが出るということは、どこかでこのhやcppをインクルードする必要があるのだろうとは思います(でもそういう類のことはウィザードで作成した際に、VC++が自動でコーディングしてくれたりしないのでしょうかね...)。 むしろ、MFCでこのような単純なC++クラスを作ること自体があまり好まれないことなのでしょうか。 もちろんこのクラスを作っていってから、ある処理をさせていこうと思っているので、自分としては以前から行っていたC++のようにコーディングしていきたいと思うのですが、もし好ましくないようならどのファイルにMFC的ではない、ただのC++的なクラスを定義したりすればよろしいのでしょうか。 もしくは、好ましくなくても何らかの対処方法があれば教えていただきたく思います。 Webで調べても MFCクラスの作成などのことしか書いてないので、ちょっとわからなくて困っています。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ヘッダーの組み込み順序を #include "stdafx.h" #include "a.h" といった具合にしましょう 最初に stdafxを組み込むのが常套手段ですよ
その他の回答 (2)
- eternalx
- ベストアンサー率35% (7/20)
一部わかりましたのでご報告致します。 A(void)の直前に型を指定できていませんので一部エラーが出てきていると思います。今、手元にVC++がないため正確なことはいえませんが、型を指定しなければいけません。詳細を見れば、何の型を指定すればいいのかがわかりますが、例えば以下の例ですと A.h------- #pragma once class A { public: int A(void); int ~A(void); }; A.cpp---------------------- #include "A.h" #include "StdAfx.h" int A::A(void) { } int A::~A(void) { } このようにしたほうがいいとコンパイラはいっているのではないでしょうか。型がかかれていないとint型として認識されるようです。
お礼
ありがとうございます。 指摘いただいた通りに修正しましたところ、 確かに一部のエラーは回復しました。 しかし 'A' :識別子がクラス名でも名前空間名でもありません。 というエラーに関しては相変わらずの状態です。 クラス名でも、、ちゃんとクラスとして宣言してるのですけどね。。
- eternalx
- ベストアンサー率35% (7/20)
ヘッダファイルのパスや#pragmaで指定しているdllはあっているかは確認しましたか?
お礼
回答ありがとうございます。 回答の意味が私の知識では把握できません。申し訳ないです。 こんな状態で質問するのは申し訳ないとは思っているのですが。 VC++で新規作成時にMFCを選んで、プロジェクトを作成し、 その状態でなにもせずにデバックをかけると、何の問題もなくなんでもないシングルウィンドウが開くことは問題ないと思います。 ですが、その状態で質問で書いたような新しいクラスを作っただけで、今のようなエラーがでるということなのです。 つまり問題がこの2つのファイルにしかないと思うのです。 もし、この2つのファイルをどこか別のファイルで参照しなければならないのならば、どこで参照しなければならないか教えていただけるでしょうか。 重ね重ねお願いいたします。
お礼
回答ありがとうございます。 ご指摘通りに修正しましたところ、無事解決いたしました。 やはり初歩的な問題だったようで、お手数おかけしまして申し訳ありませんでした。 ありがとうございました。