• ベストアンサー

Visual C++ 6.0 でクラス表示が消えてしまう

『3週間完全マスターVisual C++ 6.0 』という本を参考に、Mouse という以下のプロジェクトを始めました。 Mouse のアプリケーションタイプ: 以下に示すターゲットのダイアログベースアプリケーション: Win32 作成されるクラス: アプリケーション: CMouseApp クラス ; Mouse.h , Mouse.cpp ダイアログ: CMouseDlg クラス ; MouseDlg.h , MouseDlg.cpp 特徴: + システムメニューにバージョン情報を付加 + 3D コントロール + 共有 DLL を使用 (MFC42.DLL) + ActiveX コントロールのサポート + リソースの言語: 日本語 発生している問題は、この中の CMouseDlg というクラスにメンバー変数を追加するためにワークスペースウィンドウの ClassView タブを選択し、Mouse クラスのツリーを展開したのですが、CAboutDlg, CMouseApp, グローバルという3つのクラスしか表示されず、肝心の CMouseDlg というクラスが全く表示されず、メンバー変数を追加したくてもできない、という状況です。ソースファイル内を探せば確かに CMouseDlg クラスは存在する(正確にはMouseDlg.hというヘッダーファイル内に)のですが、ワークスペースウィンドウ内に表示されない理由がわからず困っています。 もっと正確に言いますと、プロジェクトを開始した直後にワークスペースウィンドウで Mouse クラスのツリーを展開すると、ちゃんと CMouseDlg クラスは表示されるのですが、その後 ClassWizard を使って MouseDlg.cpp というインプリメンテーションファイル内にある、ある関数にコードを追加しようとすると、突然 CMouseDlg クラスがツリー表示から消えてしまいます。 どなたか理由のわかる方がいましたら御教授ください。説明が足りなければいくらでも補足します。宜しくお願いします。

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

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

私はこれはVC++のバクではないかと考えています。 どういう条件でなるのかわかりませんが、この症状が出る人と出ない人がいます。 で、色々やりましたが直りません^^; もっとも簡単な対処方法は、ヘッダファイルを開いておいて、もしクラスが消えたらヘッダファイルをなんでも良いから編集(私は余白に改行を追加しています)して、CTRL-Sで保存します。 あら、するとまた復活します^^; このClass Viewはあまりよい作りでなくて、みんながそうなのかわかりませんが、私のClass Viewではこの他にも template class を作るとインプリメンテーションに飛んでくれない(定義がないと怒る)などなど不具合いっぱいです。 ちなみにマイクロソフトの技術情報を調べましたが、、、、、No.1の方の言われる対処方法がかいてあるだけでした。 この間も同じ質問がありましたよ。(参考URL) では。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=344064
kaneta
質問者

お礼

情報有難う御座います。お礼が遅れて申し訳ありません。 やはりバグなのでしょうか。自分も、何回か試したうちの1回はちゃんと表示されたままになることがあったので、確率の問題なのかなと思っていました。とりあえず、教えていただいた方法で試したところ、表示されなくなったクラスを再び表示させることはできましたので安心しました。有難う御座いました。 また、調べが足りず、重複した質問をしましてすみませんでした。

その他の回答 (2)

回答No.3

確かに良くなりますね。 先ずヘッダーファイルをファイルビューで探して開いてください。 ファイルの終わりの方に以下の部分があますよね。 }; //////////////////////////////これがもっと長く これをこのように改行して保存してみてください。 }; ////////////////////////////// これでクラスビューに戻ると今度は見えるはずです。

kaneta
質問者

お礼

情報有難う御座います。お礼が遅れて申し訳ありません。 試してみたところ、ちゃんと再表示されるようで助かりました。でも、いちいちこの作業をするのは面倒ですよね。バグなら何とかして欲しいものです。有難う御座いました。

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.1

はっきりとした原因は分かりませんが、クラスがツリーから見えなくなった時は 私は下記のようにしています。 1.VCを終了する 2.プロジェクトのパスごとバックアップを取る 3.プロジェクトがおかれてるパスの中から  <プロジェクト名>.ncb、<プロジェクト名>.clwを探す 4.<プロジェクト名>.ncb、<プロジェクト名>.clwを削除する 5.プロジェクトをVCで開く 6.ClassWizardを開く 7.なんか言われるので、プロジェクト内のソースを全て追加する 手元にVCが無いので曖昧ですが、たしかこんな感じでした。 もし余計に酷くなったりしたら...バックアップしたファイルを元に戻してください(^^;

kaneta
質問者

お礼

情報有難う御座います。お礼が遅れて申し訳ありません。 違う方が教えてくれた方法が簡単だったのでそちらを試していますが、こちらの方法もやってみようと思います。

関連するQ&A

  • Visual C++でクラス編集

    Vista上で、MSVS2008EEのVisual C++を使っています。 http://www.microsoft.com/japan/msdn/vstudio/express/ サブスレッドを使用するWinアプリを作ってるのですが、ヘルプに書かれていることができなくて困っています。 ファイル-新規作成-プロジェクトで、CLRのWindowsフォームアプリケーションでプロジェクトを作りました。 フォームデザインで見た目を作った後、スレッドオブジェクトを使おうと、クラス追加をしました。 クラスビューをアクティブにして、プロジェクト-クラスの追加で、C++のC++クラスで名前を入力して追加しました。 ウィザードで、名前Work、基本クラスにThreadを入力して完了ボタンを押しました。 これでクラスビューに追加したクラスが表示されます。 ヘルプでは、メソッドの追加はクラス指定して右クリックのメニューから、とあるのですが、この表示されたものに対して行ってもメニューにそのような項目はありません。 それと、CLRのThreadを認識していない感じもしています。 というのは、クラスビューで階層を見ると、基本クラスのThreadに関する情報がまるでないからです。 何がおかしくて、どうすればいいのでしょうか。

  • C++Builderのクラス

    普段、新規アプリケーションの作成で、TForm1クラスでプログラミングしています。ここに、例えば、Xクラスなどを追加作成したいのですが、.hファイルに記述するのか、.cppファイルに記述すべきなのか教えてください。

  • 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クラスの作成などのことしか書いてないので、ちょっとわからなくて困っています。よろしくお願いします。

  • VC.NET(C#)のクラスライブラリをBCB(C++)で使用したい

    タイトルにあるように、 VC.NET(C#)のクラスライブラリを作成したのですが、 BCB(C++)での使用方法がわかりません。 BCBでプロジェクトに追加で、Dllを追加するのだろうと言うのは わかったのですが、 ソース上で、Dllをどのように呼び出したらよいのかわかりません。 Dllをプロジェクトに追加する以前に、何かしなくてはならないことがあるのでしょうか? よろしくお願いいたします。

  • visual studio 2008 プロジェクトへファイル追加方法

    visual studio 2008 プロジェクトへファイル追加方法 プロジェクトのフォルダにCPPファイルなどを追加したのですが、VS2008のソリューションエクスプローラ上に表示されません。表示するにはどうしたらいいのでしょうか?

  • VisualStudio2005 C++ クラスの追加について

    C/C++カテゴリですが質問内容はVisualStudio(C++)です。 当該しそうなカテゴリがなかったのでこちらに質問させて頂きます^^ [プロジェクト]-[クラスの追加]からクラスを作成する際、クラス名などをウィザード上で入力したら、.cpp/.h ができますよね。 内容としては、コンストラクタとデストラクタが書かれています。 これに決まったファイルコメントを同時に出力したいと考えています。 下に出力イメージを記します。 test.hの中身 ----------------------------------------------------------------- /*************************************************** * testクラスの宣言 * @author : * @see : ***************************************************/ /*↑を一緒に出力したい*/ /*↓は今まで通りの出力*/ #pragma once class test { public: test(); ~test(); }; ----------------------------------------------------------------- こんなことできますでしょうか? ・クラス作成ウィザードの実態はこいつでここをこう拡張すればできる ・クラスのテンプレートなるものがいて、そこに書いてやればいい のような回答で結構です。 ご存知の方はご教授ください:-)

  • windows Visual C++6.0を利用して

    main() { printf("c言語"); } と打ち込むと  printfが定義されていないとエラー出てしまいます。 何がいけないのでしょうか? また、最初の設定に 「ファイル」・「プロジェクト」・ 「ワークスペース」・「その他のドキメント」と選択でき その中にもたくさんありますがどれを 選べばよいのでしょうか? 教えてください。おねがいします。

  • 初心者です。VisualStudioについて教えてください。(C++)

    初心者です。VisualStudioについて教えてください。(C++) VisualStudioのWindowsフォームプロジェクトを作成すると 「Form1」という簡易画面が自動で作成されます。 その画面にボタン等を追加していくと、そのボタン押下時の処理が 「Form1.h」にどんどん追加されていきます。 なぜヘッダファイルに処理の実装を記述していくのでしょうか? 基本的に、ヘッダとは関数やクラスを定義するだけのもので 実装はcppファイルに記述していくものだと研修等で教わったのですが。 なぜなのでしょう? ご教授下さい。 また、「Form1.h」ではなく「*.cpp」ファイルに実装を記述したい場合 どうのようにすればよいのでしょうか?

  • Visual C++ の大域変数

    VisualC++.NET を使ってソフトウェアを作っています(MFCを用いています)。 独自のクラスを新規に作成し、そのクラスの中身を格納したヘッダファイル、CPPファイルは自分で#includeで挿入する必要はあるのでしょうか? また、グローバル変数としてクラスを定義し、それを別のファイルから読み込もうとしても、「定義されていない識別子です。」とエラーメッセージが出てしまいます。 おそらくファイルの順番の問題だと思いますが、これらを解決する手段はありますか? よろしくお願いします。

  • Visual C#で、usingが出来ないクラスがある?

    最近、Visual C# 2005 Express EditionでC#の勉強を始めた者です。 いくつかテストプログラムを実行しようと思ったのですが、JavaのEclipse等と操作感覚の違いに戸惑っています。 質問なのは、usingできるクラスについてです。 新しいプロジェクトを作成する時、「Windowsアプリケーション」を選択すると、次のusingが使えます。 > using System.Windows.Forms; しかし「コンソールアプリケーション」を選択した場合、上記のusingは使用できないのです。 ただ、プロジェクトの「参照設定」で.Netタブの「System.Windows.Forms」を追加すれば、一応使えるようになります。 考えてみたのですが、もしかしてプロジェクトを作成する時に選択する「Windowsアプリケーション」や「コンソールアプリケーション」は、参照設定に追加する内容が違うという事なのでしょうか? 一応使う事が出来るので、今の所は問題ではないのですが、付属のマニュアルを読んでも詳細が解りにくく困っています。 私の認識は間違っているのでしょうか?