Как я могу объявить классы, которые ссылаются друг на друга? - PullRequest
2 голосов
/ 23 марта 2010

Прошло много времени с тех пор, как я сделал C ++, и у меня возникли некоторые проблемы с классами, ссылающимися друг на друга.

Прямо сейчас у меня есть что-то вроде:

хиджры

class a
{
  public:
    a();
    bool skeletonfunc(b temp);
};

b.h

class b
{
  public:
    b();
    bool skeletonfunc(a temp);
};

Так как каждому нужна ссылка на другого, я обнаружил, что не могу сделать #include друг друга наверху, или я попал в странный цикл с включениями.

Так как я могу сделать так, чтобы a мог использовать b и наоборот, не создавая циклическую проблему #include?

спасибо!

Ответы [ 2 ]

8 голосов
/ 23 марта 2010

Вы должны использовать Форвардная декларация :

хиджры

class b;
class a
{
  public:
    a();
    bool skeletonfunc(b temp);
}

Однако во многих ситуациях это может заставить вас работать со ссылками или указателями в вызовах методов или переменных-членах, поскольку вы не можете иметь полные типы в обоих заголовках классов. Если размер типа должен быть известен, вам нужно использовать ссылку или указатель. Однако вы можете использовать тип, если требуется только объявление метода.

2 голосов
/ 23 марта 2010

Использовать предварительную декларацию: http://en.wikipedia.org/wiki/Forward_declaration

...