CDatabaseEx の定義位置を調べる方法の一つですが、(VC++6.0)
CDatabaseEx の文字列を選択して右クリック
↓
メニューに「CDatabaseExの定義位置を表示」っていう項目があると思うので選んで決定
↓
ブラウズ情報がありませんとか、リビルドしますか?って聞かれたらはいを押す。
これで、CDatabaseExという定義がどこかにあれば定義位置にカーソルが移動するはず、
よければ一度お試しを。
別件バウアーさん、ありがとうございます。
試した所、検索結果と同じように二箇所にしかありませんでした。
結局、コンパイルが通る方でも二箇所にあったので、やはり何らかヘッダーファイルを
追加する事で解決できるのではないでしょうか。
CDatabaseExの宣言が無いといわれているので、
おそらく「定義位置を表示」選んでも
表示されないと思います。
むしろ、「CDatabaseEx」grep検索したほうが
見つけやすいでしょう。
>結局、コンパイルが通る方でも二箇所にあったので、やはり何らかヘッダーファイルを
>追加する事で解決できるのではないでしょうか。
ソースは開示できないという事ですので、ヘッダファイルを追加すれば解決できるかど
うかは
掲示板を見ている側には判断できません。
ヘッダファイルの不足をお疑いでしたら、二つのソースを見比べてヘッダファイルの数
や
#include する順番などを合わせてみては如何でしょうか。
それらを合わせてコンパイルできるなら良し、もし出来なくても「ヘッダファイルが原
因ではない」と
いう事は分かりますし。
気分屋さん、確かにありませんでした。ちょっと別の作業をしてたので、進みませんで
した。
ゲオさん、比べた所、順番等は同じでした。シングルドキュメントで作成したものをま
るまる(実際は全く同じではありませんが)ダイアログベースにするというのでも一緒な
用に作成していいんですよね?
例えば、シングルではViewクラスがありましたが、ダイアログでは無いので。
試してみてほしいこと
その1
>public:
> CDatabaseEx m_db;
>は、参考にしているシングルドキュメントのソースでは、~View.hと~Doc.hにありまし
>た。
1: ここでいってる『参考にしたソース』の、「~View.h」と「~Doc.h」の中にある
「#include ~」
を、全部、列挙し確認する。
(できるなら、この列挙したものを、この掲示板に提示して)
2:列挙したうち、「~View.h」と「~Doc.h」の両方のファイルに共通するものを出す
3:2ででてきたもものを、全部『あなたの作った「~Dlg.h」』に入れる
その2
元にしたシングルドキュメントのほうをデバックモードで動かし
CDatabaseEx m_db;
のm_dbの動きを追いかける。
m_dbが、メンバ関数を使っているならそこから、関数の内容へと入れば
CDatabaseExの本体にたどり着けるはず
その3
元になったシングルドキュメントをつくった人に聞く
一応 stdafx.h の中身も確認してみてください。
Ryoさんのその1をチェックしましたが、共通の内容でした。
そこでその3の方法を使いました。見てもらうと、余計なものが多くあり作り直すこと
にしました。
再作成後も同様のエラーが出ましたが、『CDatabaseEx』を『CDatabese』に変更して
『#include <afxdb.h>』の追加でエラーは
なくなりました。今度は別の関数や他の疑問点がありますが。
Blueさん、
確認しましたが、変な箇所は無くOKでした。
みなさん、長々といろいろ考えて下さってありがとうございました。
> 『CDatabaseEx』を『CDatabese』に変更して
> 『#include <afxdb.h>』の追加でエラーはなくなりました。
なんでこんなことしているのでしょうか?
『CDatabaseEx』は誰だかしらないけど、(『CDatabese』から派生しているとしても)
『CDatabese』とはまったく別物です。
同じ処理ができるとは限りません。
(C++をきちんと学習している人なら、こんなことしないと思うが。)
ですので、気分屋さんも指摘していますが、
まず、元となったプロジェクトをVCで開き、「ファイルから検索」機能を使って、
「CDatabaseEx」を探してみてください。
そして、class CDatabaseEx(もしくは struct CDatabaseEx)という記述があるファイル
をインクルードしてください。
そうですね。エラーが無くなっても望みの動きをしなきゃ意味ないですからね。
CDatabaseExに戻したらいつものエラーになりました。
>まず、元となったプロジェクトをVCで開き、「ファイルから検索」機能を使って、
>「CDatabaseEx」を探してみてください。
>そして、class CDatabaseEx(もしくは struct CDatabaseEx)という記述があるファイル
>をインクルードしてください。
検索してもいつもの二箇所のみHITしてclass や structという宣言はやはりみあた
りません。無いわけないのですが。
> いつもの二箇所
とは?メンバ変数宣言とそれ以外にもう1ヶ箇所あるわけでしょうか?
それは、どのような記述でしょうか?
もしかしたら、その記述によってソースを特定することができるかも。
コンパイルの通るほうのソースファイルの~Doc.hに
protected:
CDatabaseEx m_db;
また、同様のソースの~View.hに
public:
CDatabaseEx m_db;
この二件がファイル検索でヒットします。
新しいダイアログベースの方には~Dlg.hに
protected:
CDatabaseEx m_db;
と追加しただけです。当たり前ですが、CDatabaseExが何者か不明な為m_dbが使えませ
ん。
ちゅうか、使っていないんじゃないのそれ?
コンストラクタがどのように動いているか不確かですが、別になくてもいいような気も
するが、、、
ということで、作成者に確認したほうがいいです。ほんとうに。
そのメンバがいる意図は、掲示板の回答者にはわかりません。
(このまま掲示板で意見をもとめても、解決するとは思えない。)
あ、すいません勘違いしました。
> CDatabaseEx
じゃなくて、
> m_db
でGrepしてください。
>その記述によってソースを特定することができるかも。
解決しました。
>一応 stdafx.h の中身も確認してみてください
中身の確認が不正確でした。しっかり見るとヘッダーファイルがインクルードされてい
ないものもありまして追加によってエラーがなくなりました。
>ちゅうか、使っていないんじゃないのそれ?
一応使っているものです。
本当に長くありがとうございました。