3

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

struct Bar {
    Foo one;
    Foo two;
}

class Foo {
    Bar function();
}

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

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

4

2 回答 2

4

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

class Foo;


struct Bar {
    Foo *one;
    Foo *two;
};

class Foo {
    struct Bar function();
};

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

于 2011-10-23T04:52:28.820 回答
4

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

struct Bar;

class Foo {
    Bar function();
};

struct Bar {
    Foo one;
    Foo two;
};

Bar Foo::function()
{ 
  return Bar();
}

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

于 2011-10-23T05:00:06.040 回答