Win xpのVC++6.0です。ダイアログベースで作成しています。
はじめからあるヘッダーファイルの所に、『コンパイルエラー C2501』と出ます。識別
名を宣言するのに、型が指定されていません。との事です。
かなり基本的なエラーだと思いますが、どこで型を指定するのかがわかりません。
よろしくお願いします。
情報不足。解決への糸口がなにもない。
毎回すいません。
はじめからあるソースファイルのクラスAAA.cppの『インプリテーション』という所に、
public:
CDatabaseEx m_db;
と追加しました。それによってさっきのエラーがでました。
CDatabaseEx を CStringに変更したらメンバーではないと指摘されました。
CDatabaseExが識別名を宣言するのに、型が指定されていません。と言われました。
> CDatabaseEx
ってなに?
自分で作ったクラス?
ということを、CDatabaseEx を使う前にコンパイラに教えてあげなければ
なりません。
> CDatabaseEx を CStringに変更したら
アリエナイ変更。C++を理解度を疑問視します。
>> CDatabaseEx
>ってなに?
>自分で作ったクラス?
自分で作成したクラスです。
>ということを、CDatabaseEx を使う前にコンパイラに教えてあげなければ
>なりません。
教えたいのですが、具体的にどのように教えるのかが不明でした。
自分でも調べてみますが。
>> CDatabaseEx を CStringに変更したら
>アリエナイ変更。C++を理解度を疑問視します。
疑問視されても仕方ないミスだと思います。まだまだかなりの勉強不足というか
理解不足なので…。変更というか、試しにやってみたものなので。
> 自分で作成したクラスです。
ならば、そのクラスのあるヘッダファイル(もしくはcppファイル)
を、対象のクラス宣言の前でインクルードしてください。
というか、クラスに限らず、関数を使うときは #include ~ はしますよね?
(printfを使いたいときは #include <stdio.h> をしなければ使えないのと同じ)
>> 自分で作成したクラスです。
>ならば、そのクラスのあるヘッダファイル(もしくはcppファイル)
>を、対象のクラス宣言の前でインクルードしてください。
インクルードしてみます。書き込むクラスを間違っていたかもしれないので変更によっ
て改正されるかもしれないです。
>(printfを使いたいときは #include <stdio.h> をしなければ使えないのと同じ)
かなりわかりやすい例えでした。一番はじめに勉強してた事なのでこの例えは理解しや
すかったです。
ヘッダーをプラスしても同様のコンパイルエラーが出ました。
シングルドキュメントのソースを参考にしているのですが、ダイアログベースとは基本
的に異なるものなのでしょうか??
> ヘッダーをプラスしても同様のコンパイルエラーが出ました。
適切なヘッダを適切な位置に#includeしていないのでしょう。
> シングルドキュメントのソースを参考にしているのですが、
> ダイアログベースとは基本的に異なるものなのでしょうか??
なにを参考にしようが、元ネタが正しくコンパイルできるのならば
「あなたのしたこと」が間違っています。
そうですか、なんだかゴチャゴチャしてきたみたいです。
参考データはコンパイル通るので、その辺は問題ないです。
シングルと同じように作成すればダイアログベースでもできるって事なのかな。普通に
考えてそうですよね。
ヘッダーの位置も同じようにしていますが、エラーが出るって事は確かに自分のどこか
のミスなのでしょう。
今でも
CDatabaseEx m_db;
をコメントにしてビルド通りますか??
今は他の所変更したんでおかしいけど、さっきの状態ならそれ関係コメントアウトすれ
ばコンパイルできました。もちろんビルドも。
どのように CDatabaseEx が宣言されているのでしょうか?
もしかしたら、namespaceが必要だったり、クラス内のクラスかもしれません。
が、そこらへんの情報が一切欠かれていない以上、#includeした位置がおかしいとしか
言いようがないです。
※回答者が想像で答えても、きりがないです。
質問者は、回答者側のことも考えて質問しましょう。
すいません。
質問している側なのに勝手な発言ばかりしてしまって。申し訳ないです。
一通り整理してみて原因を探したり、具体的な事が書けるように見つけますので少し時
間を下さい。
public:
CDatabaseEx m_db;
は、参考にしているシングルドキュメントのソースでは、~View.hと~Doc.hにありまし
た。
ダイアログベースで作成する際に、Viewクラスの代わりにDlgクラスを使っていると思い
~Dlg.hに『CDatabaseEx m_db;』を追加して、Doc.hは新規でクラスを作成しそこに書き
込みました。
CDatabaseExというのはクラスの名前ではありません。CStringやintのように使用したい
ものです。
多分、不明な点があると思いますが、できるだけがんばって書いたつもりです。