私は、囲むクラスから関数を呼び出す必要があるインスタンス化されたクラスがある状況があります。最上位クラスは生成されたコードであり、最下位クラスの後にコンパイルされます。その結果、トップクラスの名前はボトムクラスには知られていません。構造体を囲むメンバー関数を呼び出す
class topClass
{
public:
void topFunction();
bottomCLass * bcInst;
}
class bottomClass
{
void * owner;
void someFunction() {owner->topFunction(); }
}
明らかに、topClassの定義がないため、これは機能しません。 topClass関数をbottomClass関数から呼び出せるように、これをどのように配置できますか?純粋な仮想関数で親クラスを使用しようとしましたが、関数が呼び出されるとクラッシュします。
//This is defined and compiled with bottomClass
class classTemplate
{
public:
virtual void topFunction()=0;
}
class topClass : public classTemplate
{
public:
void topFunction();
bottomClass * bcInst;
}
class bottomClass
{
classTemplate * owner;
void someFunction() {owner->topFunction();//Crashes here }
}
この問題を解決する方法がありますか?私ができないことの1つは、トップクラスの名前/定義をボトムクラスに与えることですが、topFunctionの存在と名前は保証されています。
このリンクを見てくださいhttp://www.parashift.com/c++-faq/strange-inheritance.html#faq-23.4ここで彼は仮想機能について語り、そのように定義する方法は、ベースクラスが派生バージョンを呼び出します。これがあなたの望むものなのかどうかは確かではありません。 – chikuba
また、「クラッシュ」という意味ですか?私たちが話しているクラッシュの種類を指定してください...あなたが投稿したコードは有効でなければなりません(いくつかの小さな問題を含む)ので、より多くのコードまたはより多くのクラッシュレポートを与えることができます – chikuba