ポリモーフィック オブジェクト メンバーに関する私の質問に対して、昨日エレガントな回答を得ました。
しかし今、変数が期待どおりに動作していないという問題に直面しています。次のコードが使用されています。
#include <iostream>
#include <math.h>
using std::cin;
using std::cout;
using std::endl;
class Com
{
public:
virtual void setReady()
{
cout << "Com" << endl;
}
};
class DerivedCom : public Com
{
public:
void setReady()
{
cout << "DCom" << endl;
}
void somethingElse()
{
cout << "else" << endl;
}
};
class BaseClass
{
public:
Com* com;
public:
BaseClass(Com* c = new Com) : com(c)
{
}
virtual void setReady()
{
com->setReady();
}
};
class DerivedClass : public BaseClass
{
// the call to somethingElse() won't compile if I leave out this declaration
protected:
DerivedCom* com;
public:
DerivedClass() : BaseClass(new DerivedCom)
{
}
void setReady()
{
// This line causes a segfault if I put in the declaration earlier
this->com->setReady();
// This line won't compile if I leave out the declaration earlier
this->com->somethingElse();
}
};
int main()
{
DerivedClass* inst = new DerivedClass();
inst->setReady();
return 0;
}
問題は、それDerivedClass::com
は実際にはタイプですが、コンパイラがそれらを見つけられないため、特定のメソッドにDerivedCom
アクセスできないことです。DerivedCom
追加の re-declaration を入れるとDerivedCom* com
、コンパイラはメソッドを見つけますが、セグメンテーション エラーが発生します。