Как объявить структуру A, которая содержит экземпляры класса B, где класс B имеет функции, которые возвращают структуру A? - PullRequest
3 голосов
/ 23 октября 2011

Я старался изо всех сил описать цель в названии, но здесь она есть в коде:

struct Bar {
    Foo one;
    Foo two;
}

class Foo {
    Bar function();
}

Я знаю, что это не сработает, но как бы я реализовал идею?Причина, по которой я хочу сделать структуру глобальной, заключается в том, что она также используется в main.cpp.Я уже пытался объявить структуру внутри класса, а затем определить структуру вне класса как Foo :: Bar {}, но это тоже не работает.

Причина, по которой я хочу это сделать, заключается в том, чтопотому что у меня есть функции, которые должны возвращать более одной переменной, такие как функция деления, которая возвращает как частное, так и остаток.Проблема, однако, в том, что возвращаются несколько экземпляров пользовательского класса (BigInteger).

Ответы [ 2 ]

4 голосов
/ 23 октября 2011

Поскольку 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.

4 голосов
/ 23 октября 2011

Вам просто нужно выполнить переадресацию классов следующим образом:

class Foo;


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

class Foo {
    struct Bar function();
};

Это объявляет класс без его фактического определения, что делает его пригодным для использования.

...