- - PR -
VC++ クラスの関数の呼び出し
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-20 10:53
初めまして、whiteです。
VC++について、質問があります。 教えて頂きませんか? 開発環境:WindowXP、Microsoft Visual Studio .NET 2003 下記のようなコードがあって、一つのクラスの関数からもうひとつのクラスの関数 を呼び出す方法がわかりません。 ===================================== ファイル名:Iob.h ===================================== class Iob { public: virtual void autoatach() = 0; }; ===================================== ファイル名:Cob.h ===================================== #include "Iob.h" class Cob:public Iob { public: Cob(); virtual ~Cob(); virtual void autoatach(); }; ===================================== ファイル名:Cob.cpp ===================================== #include "Cob.h" Cob::Cob() { } Cob::~Cob() { ****************; } void Cob::autoatach() { } ===================================== ファイル名:Listboxob.cpp ===================================== #include "Cob.h" 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(); } ===================================== ファイル名:Absdialogob.h ===================================== #include "Cob.h" class Absdialogob : public Cob { public: Absdialogob(); virtual ~Absdialogob(); }; ===================================== ファイル名:Absdialogob.cpp ===================================== #include "Absdialogob.h" Absdialogob::Absdialogob() { } Absdialogob::~Absdialogob() { } ===================================== ファイル名:Cdialogob.h ===================================== #include "Absdialogob.h" class Cdialogob:public Absdialogob { public: Cdialogob(); virtual ~Cdialogob(); virtual autoatach(); }; ===================================== ファイル名:Cdialogob.cpp ===================================== #include "Cdialogob.h" Cdialogob::Cdialogob():Absdialogob() { } Cdialogob::~Cdialogob() { } Cdialogob::autoatach() { *************; } ===================================== ファイル名:Crosdialogob.cpp ===================================== class Crosdialogob:public Crosdialogob { public: Crosdialogob(); virtual ~Crosdialogob(); virtual autoatach(); private: void callgotosrc(); }; Crosdialogob::autoatach() { *************; } void Crosdialogob::callgotosrc() { ここでファイルListboxob.cppの関数gotosrc()を呼び出す } ===================================== 今、インタフェースを作成していて、あるボタンが押されたら、 Crosdialogob::callgotosrc()が呼び出されます。 この関数中で、違うクラスにある関数gotosrc()をどう呼べばいいでしょうか? 長くコードを書いてしまって、読みにくいと思いますが、 よろしくお願いします。 | ||||||||
|
投稿日時: 2006-01-20 11:07
違うクラスのインスタンスを作って、呼び出せば良いんじゃないですか???
ん?まったくはずしてる・・・??(汗 | ||||||||
|
投稿日時: 2006-01-20 11:11
見にくかったので、自分なりに整形したところ
の記述がおかしいですね。 Crosdialogobが何から派生しているのかはっきりとわからないので解答しようがないですね。 | ||||||||
|
投稿日時: 2006-01-20 11:14
うん、読みづらいですね。 必要な最低限の部分を抜き出して書いてください。 提示されたソースは、ほとんどの部分がwhileさんが聞きたいこととと関係ないですよね。 CrosdialogobがListboxobを継承しているなら、Crosdialogobがgotosrc()を持っているということですからそのまま呼び出せばいいと思います。 最近私はC++を触ってないので忘れてしまったのかもしれませんが、Crosdialogob.cppの1行目の class Crosdialogob:public Crosdialogob これはどういう意味でしたっけ? | ||||||||
|
投稿日時: 2006-01-20 11:25
ごめんなさい。
CrosdialogobはCdialogobの派生クラスです。 書き間違えました。 関数callgotosrc()中で、 Listboxob list; list.gotosrc(); を書きましたが、listが抽象クラスで、インスタンスできないというエラーが返されました。 | ||||||||
|
投稿日時: 2006-01-20 11:33
あっ Listboxob は抽象クラスなのか・・・
virtual void autoatach(); を実装しているクラスを定義して、 そちらのインスタンスを作成しないとだめですね
| ||||||||
|
投稿日時: 2006-01-20 11:39
文法間違っていますよ。C++なんでnew するときは ポインタです。 (Listboxob::autoatachの実装がされているから) Listboxob は抽象クラスではないはずなんですがね。 # ここに載せているソース以外に実装されていない純粋仮想関数があればそのようなエラーは出ますが。 ところで、Listboxob は cpp に書いているのはなぜ? ほかのところで使われるならば .h に書くようにしたほうが良いのでは? [ メッセージ編集済み 編集者: Blue 編集日時 2006-01-20 11:55 ] | ||||||||
|
投稿日時: 2006-01-20 11:57
こんにちは。
提示されたコードからだけでは、Listboxobが抽象クラスだなんて分からないですね。 #おそらく、autoatach以外のなにかの純粋仮想関数の宣言が省略されているんしょうけれども。 Listboxobクラスが本当に抽象クラスであるならば、 Listboxobクラスから派生した具象クラスを作らないと、インスタンスが作成できないですよ。 |
1|2|3
次のページへ»