Использование класса до его объявления

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

Использование класса до его объявления

Сообщение BratSinot »

Доброго времени суток!

Проблема такая, есть два класса BinaryU32 и BinaryU64. В каждом из них нужно использовать другой, примерно так:

Код: Выделить всё

class BinaryU64 {
<...>
        BinaryU64 operator+ (BinaryU32 &);
<...>
};

class BinaryU32 {
<...>
        BinaryU64 operator+ (BinaryU64 &);
<...>
};


Но вылазит очевидная проблема, что class BinaryU64 ругается на неизвестный BinaryU32.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Использование класса до его объявления

Сообщение drBatty »

Код: Выделить всё

class BinaryU32;

class BinaryU64 {
<...>
        BinaryU64 operator+ (BinaryU32 &);
<...>
};

class BinaryU32 {
<...>
        BinaryU64 operator+ (BinaryU64 &);
<...>
};

при этом ругаться уже не будет, пока вы не залезете внутрь BinaryU32. А вы не лезьте. Если нужен метод, который лезет, запишите его ПОСЛЕ class BinaryU32{...};
Можно даже в другом файле это сделать. (т.е не в *.hpp, а в *.cpp)

PS: также можно объявлять не только классы, но и всё что угодно. Переменные, функции(глобальные), и ещё друзей(в т.ч. и классы-друзья).

PPS:
drBatty писал(а):
23.09.2013 13:31
BinaryU32 &

ссылку и указатель оно съест. А вот сам объект -- уже нет. Причина в том, что для передачи объекта нужен конструктор копии, а он в данный момент неизвестен. Это ещё один аргумент против передачи по значению в C++.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: