我正在尝试预定义派生类,如下所示,
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 *会得到无效的静态强制转换?
答案 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;
}