【发布时间】:2015-12-29 19:57:40
【问题描述】:
假设我有一个基础抽象类:
class Foo {
public:
struct FooStruct;
virtual FooStruct *DoFoo() = 0;
};
现在我想在Bar 中实现DoFoo 并在其中定义FooStruct:
class Bar: public Foo {
public:
struct FooStruct {
int data;
};
FooStruct *DoFoo() {
FooStruct *fs = new FooStruct;
fs->data = 42;
return fs;
}
};
但是,g++(就我而言)将Foo::FooStruct 和Bar::FooStruct 识别为两个不同的结构,并且会抱怨invalid covariant type ...,因为我重新定义了方法的返回类型。
我该如何解决这个问题?
【问题讨论】:
-
你也需要定义
Foo::FooStruct。您定义Bar::FooStruct的事实无关紧要。 -
返回值需要一个通用的基类。