预定义的派生类

时间:2011-04-28 15:02:55

标签: c++ oop

我正在尝试预定义派生类,如下所示,

class Base{

}

class Derived;

class Unreleated{
   Base* ptr;
public:
  Unreleated& operator, (const Unreleated& m){
    static_cast<Derived*>(ptr); // pointer is a derived.

    return *this;
  }


}

class Derived : public Base{
 //this is a container holding a bunch of unrelated.
}

但是我从Base *到Derived *会得到无效的静态强制转换?

2 个答案:

答案 0 :(得分:3)

为了static_cast来自base-&gt; child或child-&gt; base,编译时必须知道编译器的关系。

由于它确实不相关,所以在定义base和derived之后定义你的Unrelated类以正确建立继承关系。

如果Derived实际上按值继承了一堆Unrelated,那么你就有了无法解决的循环依赖性。您必须重新考虑您的设计,使其能够以您想要的方式工作。没有更多详细信息,很难进一步提供帮助。

答案 1 :(得分:3)

Unreleated::operator,的定义移至Derived的定义之后。

class Base{

};

class Derived;

class Unreleated{
   Base* ptr;
public:
  Unreleated& operator, (const Unreleated& m);

};

class Derived : public Base{
 //this is a container holding a bunch of unrelated.
};

  Unreleated& Unreleated::operator, (const Unreleated& m){
    static_cast<Derived*>(ptr); // pointer is a derived.

    return *this;
  }