【问题标题】:How to declare struct A that contains instances of class B, where class B has functions that return struct A?如何声明包含类 B 的实例的结构 A,其中类 B 具有返回结构 A 的函数?
【发布时间】:2011-10-23 04:49:42
【问题描述】:

我尽力在标题中描述目标,但这里是代码:

struct Bar {
    Foo one;
    Foo two;
}

class Foo {
    Bar function();
}

我知道这行不通,但我将如何实现这个想法?我想让 struct 全局化的原因是因为它也在 main.cpp 中使用。我已经尝试在类内声明结构,然后将类外的结构定义为 Foo::Bar { } 但这也不起作用。

我想要这样做的原因是因为我有需要返回多个变量的函数,例如返回商和余数的除法函数。然而,问题是自定义类 (BigInteger) 的多个实例被返回。

【问题讨论】:

    标签: c++ class struct declare


    【解决方案1】:

    由于Bar 包含Foo 的实例,因此后者在前者的声明中不能不完整。所以你需要在声明Bar之前声明Foo。但是,由于Foo 包含一个返回Bar 对象的函数,因此您必须在声明Foo 之前转发声明Bar

    struct Bar;
    
    class Foo {
        Bar function();
    };
    
    struct Bar {
        Foo one;
        Foo two;
    };
    
    Bar Foo::function()
    { 
      return Bar();
    }
    

    注意Foo::function的实际定义只能出现在Bar的声明之后,因为该函数需要实例化一个Bar对象。

    【讨论】:

    • 你打算上课吗?成为结构吧;?是的,这都在一个头文件中,所以所有的实现都在后面。
    • @Sooie 是的,对不起。我已经修好了。
    【解决方案2】:

    你只需要像这样进行类转发:

    class Foo;
    
    
    struct Bar {
        Foo *one;
        Foo *two;
    };
    
    class Foo {
        struct Bar function();
    };
    

    这声明了类而不实际定义它,从而使其可用。

    【讨论】:

    • 这行不通。首先foo != Foo; C++ 区分大小写。此外,Bar 包含 Foo 的实例而不是指针或对实例的引用,因此 Foo 类型在 Bar 的声明中不能不完整。
    • 当我尝试这样做时,我得到了错误:字段“一”的类型不完整,字段“二”的类型不完整(编辑:Praetorian 所说的)
    • 啊,是的@Praetorian,感谢您了解这一点。我已经纠正了。 Sooie 请看我的更正。
    • 现在可以编译了,但是你已经彻底改变了类定义,可能@Sooie 需要Bar 来包含Foo 实例,并且不想动态分配它们。跨度>
    猜你喜欢
    • 2022-12-18
    • 1970-01-01
    • 2020-11-09
    • 2020-03-03
    • 2011-03-03
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多