c++ - 在基类中转发声明嵌套结构

标签 c++ oop

<分区>

假设我有一个基本抽象类:

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::FooStructBar::FooStruct 识别为两个不同的结构,并且会提示无效的协变类型... 因为我重新定义了方法的返回类型。

我该如何解决这个问题?

最佳答案

我猜你的目的是做一些事情:

Foo * my_foo = new Bar();
FooStruct * my_result = my_foo->DoFoo();

问题是现在要使用my_result,您必须知道它隐含地是由Bar 创建的struct。因此,您应该将返回的 struct 外部定义为 Foo

关于c++ - 在基类中转发声明嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893069/

相关文章:

c++ - 查找具有最多不同字符的字符串

c++ - C、指针和void函数

python - 将自身对象传递给需要此类型的函数

javascript - 在 Javascript 中声明此对象上的方法时如何正确引用对象上设置的方法?

Java 注释处理器 : Usage & Applications

c++ - 如何在可变参数模板推导期间将指针隐式转换为 const 指针

C++设计,如何用对象表示协议(protocol)的不同阶段

java - super 构造函数无法按我认为的方式工作

c++ - boost::thread 错误 "member function redeclaration not allowed"

python - 在Python中模拟复杂的数据结构