クラスBのコンストラクタ + 基底クラスの純粋仮想関数(virtual ~ = 0;)の定義を載せ
てください。
というか
> Kansu2()はvirtualで宣言してます
virtual の意味は理解できていますよね?
> VC6だと、warning C4259も出ちゃいました。
これは、Level4でないと出ないだけだと思われます。
クラスBのコンストラクタと基底クラスの純粋仮想関数は下記になります。
class B:public CB
{
public:
B(IPMUnknown *boss); <----IPMUnknownは現在作成しているプログラムをダウ
ロードして、
実行するアプリケーション(Indesign)特有のものです。
~B();
virtual void Kansu2(); <----Kansu2()はvirtualで宣言してます
virtual bbbb();
private:
void cccc();
};
class PUBLIC_DECL CB : public IB
{
public:
CB(IPMUnknown *boss, PMIID interfaceID = IID_IOBSERVER); <----()中は
Indesign特有のもの
virtual ~CB();
virtual bbbb();
protected:
DECLARE_HELPER_METHODS()
};
class IB : public IPMUnknown
{
public:
virtual bbbb()=0;
};
とりあえず、関数呼出だけに限って言えば、
私の書いたように参照で引数渡しすれば通ると思いますが、
インスタンスをどうしたいかは、要求と設計次第なので
今の情報ではなんとも言えません。
今でてるエラーは別問題。
kansu1()はif文である条件が成立した時に呼ばれますが、
呼ばれる前にclass Bのインスタンスを生成すればいいでしょうか?
>Kansu2()はvirtualで宣言してます
virtualは基本クラスで宣言するものと本に書いてありましたが、
Kansu2()をclass Bにしかない関数にしたい時は、virtualで宣言
するのは間違ってる、という理解でいいでしょうか?
現在作成しているプログラムは、すでに出来上がっているものに対して、
手を加えているもので、プログラムのこともC++のこともまだまだ理解できていません。
初歩的な質問ばかりして、大変心苦しいのですが、
気を悪くせずに、どうか教えてください。
よろしくお願いします。
> Kansu2()をclass Bにしかない関数にしたい時
簡単な例。
class BaseB
{
public:
};
class B : public BaseB
{
public:
void Kansu2();
};
>kansu1()はif文である条件が成立した時に呼ばれますが、
>呼ばれる前にclass Bのインスタンスを生成すればいいでしょうか?
>Kansu2()をclass Bにしかない関数にしたい時は、virtualで宣言
>するのは間違ってる、という理解でいいでしょうか?
どんな目的で何をする関数かも分からない状態で、
これらを判断することは出来ません。
>プログラムのこともC++のこともまだまだ理解できていません。
という状態で、
>すでに出来上がっているものに対して、手を加えているもので
ということをしている時点で間違っています。
> kansu1()はif文である条件が成立した時に呼ばれますが、
> 呼ばれる前にclass Bのインスタンスを生成すればいいでしょうか?
そうすることは可能ですが、それで正解かどうかは マーちゃん さん以外には判断できません。
背景や事情を知っているのは、マーちゃん さんだけです。
> 初歩的な質問ばかりして、大変心苦しいのですが、
> 気を悪くせずに、どうか教えてください。
気は悪くしてませんが、C++の必要な知識をここで全部説明するのは不可能です。
「とりあえず動けばいい」的な対応をすると、C/C++では危険なコードを作る可能性が高いので、
もっと簡単なものから初めて、理解できるようになってから修正された方が安全だと思います。
C++をもう少し勉強してから、インスタンスの生成場所を考えてみたいと思います。
付き合っていただいて、ありがとうございました。
また何かありましたら、よろしくお願いします。