コンパイルエラー C2501 – 固定ページ 3 – プログラミング – Home

通知
すべてクリア

[解決済] コンパイルエラー C2501

固定ページ 3 / 4

別件バウアー
 別件バウアー
(@別件バウアー)
ゲスト
結合: 18年前
投稿: 10
 

CDatabaseEx の定義位置を調べる方法の一つですが、(VC++6.0)

CDatabaseEx の文字列を選択して右クリック

メニューに「CDatabaseExの定義位置を表示」っていう項目があると思うので選んで決定

ブラウズ情報がありませんとか、リビルドしますか?って聞かれたらはいを押す。

これで、CDatabaseExという定義がどこかにあれば定義位置にカーソルが移動するはず、
よければ一度お試しを。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

別件バウアーさん、ありがとうございます。

試した所、検索結果と同じように二箇所にしかありませんでした。

結局、コンパイルが通る方でも二箇所にあったので、やはり何らかヘッダーファイルを
追加する事で解決できるのではないでしょうか。


返信引用
気分屋
 気分屋
(@気分屋)
ゲスト
結合: 19年前
投稿: 15
 

CDatabaseExの宣言が無いといわれているので、
おそらく「定義位置を表示」選んでも
表示されないと思います。

むしろ、「CDatabaseEx」grep検索したほうが
見つけやすいでしょう。


返信引用
Geo=TK3
 Geo=TK3
(@Geo=TK3)
ゲスト
結合: 19年前
投稿: 6
 

>結局、コンパイルが通る方でも二箇所にあったので、やはり何らかヘッダーファイルを
>追加する事で解決できるのではないでしょうか。

ソースは開示できないという事ですので、ヘッダファイルを追加すれば解決できるかど
うかは
掲示板を見ている側には判断できません。

ヘッダファイルの不足をお疑いでしたら、二つのソースを見比べてヘッダファイルの数

#include する順番などを合わせてみては如何でしょうか。
それらを合わせてコンパイルできるなら良し、もし出来なくても「ヘッダファイルが原
因ではない」と
いう事は分かりますし。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

気分屋さん、確かにありませんでした。ちょっと別の作業をしてたので、進みませんで
した。

ゲオさん、比べた所、順番等は同じでした。シングルドキュメントで作成したものをま
るまる(実際は全く同じではありませんが)ダイアログベースにするというのでも一緒な
用に作成していいんですよね?
例えば、シングルではViewクラスがありましたが、ダイアログでは無いので。


返信引用
Ryo
 Ryo
(@Ryo)
ゲスト
結合: 23年前
投稿: 252
 

試してみてほしいこと

その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
元になったシングルドキュメントをつくった人に聞く


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

一応 stdafx.h の中身も確認してみてください。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

Ryoさんのその1をチェックしましたが、共通の内容でした。
そこでその3の方法を使いました。見てもらうと、余計なものが多くあり作り直すこと
にしました。

再作成後も同様のエラーが出ましたが、『CDatabaseEx』を『CDatabese』に変更して
『#include <afxdb.h>』の追加でエラーは
なくなりました。今度は別の関数や他の疑問点がありますが。

Blueさん、
確認しましたが、変な箇所は無くOKでした。

みなさん、長々といろいろ考えて下さってありがとうございました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 『CDatabaseEx』を『CDatabese』に変更して
> 『#include <afxdb.h>』の追加でエラーはなくなりました。
なんでこんなことしているのでしょうか?

『CDatabaseEx』は誰だかしらないけど、(『CDatabese』から派生しているとしても)
『CDatabese』とはまったく別物です。
同じ処理ができるとは限りません。
(C++をきちんと学習している人なら、こんなことしないと思うが。)

ですので、気分屋さんも指摘していますが、
まず、元となったプロジェクトをVCで開き、「ファイルから検索」機能を使って、
「CDatabaseEx」を探してみてください。
そして、class CDatabaseEx(もしくは struct CDatabaseEx)という記述があるファイル
をインクルードしてください。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

そうですね。エラーが無くなっても望みの動きをしなきゃ意味ないですからね。
CDatabaseExに戻したらいつものエラーになりました。

>まず、元となったプロジェクトをVCで開き、「ファイルから検索」機能を使って、
>「CDatabaseEx」を探してみてください。
>そして、class CDatabaseEx(もしくは struct CDatabaseEx)という記述があるファイル
>をインクルードしてください。

検索してもいつもの二箇所のみHITしてclass や structという宣言はやはりみあた
りません。無いわけないのですが。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> いつもの二箇所
とは?メンバ変数宣言とそれ以外にもう1ヶ箇所あるわけでしょうか?
それは、どのような記述でしょうか?
もしかしたら、その記述によってソースを特定することができるかも。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

コンパイルの通るほうのソースファイルの~Doc.hに

protected:
CDatabaseEx m_db;

また、同様のソースの~View.hに

public:
CDatabaseEx m_db;

この二件がファイル検索でヒットします。

新しいダイアログベースの方には~Dlg.hに

protected:
CDatabaseEx m_db;

と追加しただけです。当たり前ですが、CDatabaseExが何者か不明な為m_dbが使えませ
ん。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ちゅうか、使っていないんじゃないのそれ?
コンストラクタがどのように動いているか不確かですが、別になくてもいいような気も
するが、、、

ということで、作成者に確認したほうがいいです。ほんとうに。
そのメンバがいる意図は、掲示板の回答者にはわかりません。
(このまま掲示板で意見をもとめても、解決するとは思えない。)


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

あ、すいません勘違いしました。
> CDatabaseEx
じゃなくて、
> m_db
でGrepしてください。

>その記述によってソースを特定することができるかも。


返信引用
はな
 はな
(@はな)
ゲスト
結合: 22年前
投稿: 123
Topic starter  

解決しました。

>一応 stdafx.h の中身も確認してみてください

中身の確認が不正確でした。しっかり見るとヘッダーファイルがインクルードされてい
ないものもありまして追加によってエラーがなくなりました。

>ちゅうか、使っていないんじゃないのそれ?

一応使っているものです。

本当に長くありがとうございました。


返信引用
固定ページ 3 / 4

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました