如何声明包含类B实例的struct A,其中类B具有返回struct A的函数?

时间:2011-10-23 04:49:43

标签: c++ class struct declare

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

struct Bar {
    Foo one;
    Foo two;
}

class Foo {
    Bar function();
}

我知道这不起作用,但我怎么能完成这个想法呢?我想让结构全局化的原因是因为它也在main.cpp中使用。我已经尝试在类中声明结构,然后将类外部的结构定义为Foo :: Bar {},但这也不起作用。

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

2 个答案:

答案 0 :(得分:4)

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

class Foo;


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

class Foo {
    struct Bar function();
};

这声明了该类而没有实际定义它,从而使它可用。

答案 1 :(得分: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对象。