- PR -

VC++ クラスの関数の呼び出し

投稿者投稿内容
white
会議室デビュー日: 2006/01/20
投稿数: 6
投稿日時: 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()をどう呼べばいいでしょうか?
長くコードを書いてしまって、読みにくいと思いますが、
よろしくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-20 11:07
引用:

今、インタフェースを作成していて、あるボタンが押されたら、
Crosdialogob::callgotosrc()が呼び出されます。
この関数中で、違うクラスにある関数gotosrc()をどう呼べばいいでしょうか?
長くコードを書いてしまって、読みにくいと思いますが、
よろしくお願いします。



違うクラスのインスタンスを作って、呼び出せば良いんじゃないですか???
コード:
Listboxob listboxob = new Listboxob();
listboxob.gotosrc()


ん?まったくはずしてる・・・??(汗
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-01-20 11:11
見にくかったので、自分なりに整形したところ
引用:

whiteさんの書き込み (2006-01-20 10:53) より:
コード:
class Crosdialogob:public Crosdialogob




の記述がおかしいですね。
Crosdialogobが何から派生しているのかはっきりとわからないので解答しようがないですね。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-01-20 11:14
引用:

whiteさんの書き込み (2006-01-20 10:53) より:
長くコードを書いてしまって、読みにくいと思いますが、


うん、読みづらいですね。
必要な最低限の部分を抜き出して書いてください。
提示されたソースは、ほとんどの部分がwhileさんが聞きたいこととと関係ないですよね。

CrosdialogobがListboxobを継承しているなら、Crosdialogobがgotosrc()を持っているということですからそのまま呼び出せばいいと思います。
最近私はC++を触ってないので忘れてしまったのかもしれませんが、Crosdialogob.cppの1行目の
class Crosdialogob:public Crosdialogob
これはどういう意味でしたっけ?
white
会議室デビュー日: 2006/01/20
投稿数: 6
投稿日時: 2006-01-20 11:25
ごめんなさい。
CrosdialogobはCdialogobの派生クラスです。
書き間違えました。
関数callgotosrc()中で、
Listboxob list;
list.gotosrc();
を書きましたが、listが抽象クラスで、インスタンスできないというエラーが返されました。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-20 11:33
あっ Listboxob は抽象クラスなのか・・・
virtual void autoatach();

を実装しているクラスを定義して、
そちらのインスタンスを作成しないとだめですね
コード:
  Listboxob list = new Listboxobを実装しているクラス

Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-01-20 11:39
引用:

かるあさんの書き込み (2006-01-20 11:33) より:
あっ Listboxob は抽象クラスなのか・・・
virtual void autoatach();

を実装しているクラスを定義して、
そちらのインスタンスを作成しないとだめですね
コード:

Listboxob list = new Listboxobを実装しているクラス




文法間違っていますよ。C++なんでnew するときは ポインタです。

(Listboxob::autoatachの実装がされているから)
Listboxob は抽象クラスではないはずなんですがね。
# ここに載せているソース以外に実装されていない純粋仮想関数があればそのようなエラーは出ますが。

ところで、Listboxob は cpp に書いているのはなぜ?
ほかのところで使われるならば .h に書くようにしたほうが良いのでは?

[ メッセージ編集済み 編集者: Blue 編集日時 2006-01-20 11:55 ]
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2006-01-20 11:57
こんにちは。

引用:

whiteさんの書き込み (2006-01-20 11:25) より:
関数callgotosrc()中で、
Listboxob list;
list.gotosrc();
を書きましたが、listが抽象クラスで、インスタンスできないというエラーが返されました。



提示されたコードからだけでは、Listboxobが抽象クラスだなんて分からないですね。
#おそらく、autoatach以外のなにかの純粋仮想関数の宣言が省略されているんしょうけれども。

Listboxobクラスが本当に抽象クラスであるならば、
Listboxobクラスから派生した具象クラスを作らないと、インスタンスが作成できないですよ。

スキルアップ/キャリアアップ(JOB@IT)