- - PR -
VC++ クラスの関数の呼び出し
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-20 12:10
Listboxobクラスに純粋仮想関数を作ってないです。
一番大元のIobクラスだけ、純粋仮想関数を持っています。 ListboxobクラスをもしListboxob.hファイルに書いたら、 Listboxob.cppファイルには、クラス中で宣言している関数の定義だけして、 Listboxob.hファイルをincludeすればいいですよね!? | ||||||||
|
投稿日時: 2006-01-20 12:17
そのIobクラスの全ての純粋仮想関数はListboxobクラスで実装していますか? でないと使えませんよ。 (提示されたソースのみならば発生しません。)
そうです。 ここと似たような話になってきている。。。 [ メッセージ編集済み 編集者: Blue 編集日時 2006-01-20 12:20 ] | ||||||||
|
投稿日時: 2006-01-20 12:26
Iobクラスの全ての純粋仮想関数はListboxobクラスで実装していません。
一部の純粋仮想関数はCobクラス中で実装しています。 ListboxobクラスはCobクラスを継承していますから、 大丈夫ですよね!? | ||||||||
|
投稿日時: 2006-01-20 12:32
こんんちは。
大丈夫じゃないです。 純粋仮想関数の実装は、派生クラスで漏れなく実装してください。 | ||||||||
|
投稿日時: 2006-01-20 12:37
一部ではダメです。 Listboxobからみて、親クラスでたとえ一つでも純粋仮想関数が実装されていない状態では使えません。 例)
| ||||||||
|
投稿日時: 2006-01-20 12:59
私の言い方が悪かったようです。
Iobクラスにあるすべての純粋仮想関数は、 その派生クラスCob中ですべて実装しています。 Listboxobクラスでは、Cobクラス中の一部の関数をもう一回定義しています。 class Iob { public: virtual void autoatach() = 0; virtual void setatach() = 0; }; class Cob:public Iob { public: Cob(); virtual ~Cob(); virtual void autoatach(); virtual void setatach(); }; Cob::Cob() { } Cob::~Cob() { ****************; } void Cob::autoatach() { } void Cob::setatach() { *****************; } class Listboxob:public Cob { public: Listboxob(); ~Listboxob(); virtual void autoatach(); void gotosrc(); private: void setdata(); }; Listboxob::Listboxob():Cob { } Listboxob::~Listboxob() { } void Listboxob::autoatach() { ***********; } void Listboxob::setdata() { ************; } void Listboxob::gotosrc() { setdata(); } という感じです。 | ||||||||
|
投稿日時: 2006-01-20 13:14
ならば、そのようなエラーはでないはずなんですが。 リビルドしても、同じようでしたら エラーメッセージをそのまま張ってもらえますでしょうか? それと、Listboxob::~Listboxob() の宣言に virtual がないのは意図的でしょうか? コードを載せるときは〔code〕〔/code〕で囲いましょう。 ※ 〔〕は実際は半角です。 | ||||||||
|
投稿日時: 2006-01-20 16:16
コードを下のように変更して、
@ファイルListboxob.hを作成して、クラスListboxobの宣言をこのファイルに書き AファイルListboxob.cppにListboxob.hをincludeする BファイルCrosdialogob.cppにListboxob.hをincludeする CファイルCrosdialogob.cppで、関数Crosdialogob::callgotosrc()の中で Listboxob list; list.gotosrc(); として、クラスListboxobの関数gotosrc()を呼び出す。 リビルドしたところ、抽象クラスのインスタンスが作成できないという エラーが無くなりました。 しかし、クラスListboxobは有効なデフォルトコンストラクタがないと言われます。 ”有効なデフォルトコンストラクタ”とは何でしょうか?
意図的というわけではありません。 デストラクタをvirtual宣言するのとしないのとで何が違うかがわかりません。。。 |