Классы ... :((((((
От: Mmmaloy Германия  
Дата: 06.10.04 22:08
Оценка: :)))
Вот такая конструкция (в одном файле). Естественно не работает.

class A 
{
   B b; // !!!! // Не видит B
};

class B
{
    A a;
};


Не работает, а хотелось бы. Причем нужно, что бы оба описания класса остались в одном файле.
Где-то (могу ошибаться) встречал то-ли макрос, то ли оператор, который прописываля в начале файла, оба класса друг друга видели. Инофо относительно компилятора VC++ 2003 net, MFC
Re: Классы ... :((((((
От: Chipset2k Россия http://merlinko.com
Дата: 06.10.04 22:12
Оценка: 2 (1) -6 :))
Здравствуйте, Mmmaloy, Вы писали:

M>Вот такая конструкция (в одном файле). Естественно не работает.


M>
M>class A 
M>{
M>   B b; // !!!! // Не видит B
M>};

M>class B
M>{
M>    A a;
M>};
M>


M>Не работает, а хотелось бы. Причем нужно, что бы оба описания класса остались в одном файле.

M>Где-то (могу ошибаться) встречал то-ли макрос, то ли оператор, который прописываля в начале файла, оба класса друг друга видели. Инофо относительно компилятора VC++ 2003 net, MFC
class B;
class A 
{
   B b; // !!!! // Не видит B
};
class B
{
    A a;
};
"Всё что не убивает нас, делает нас сильнее..."
Re: Классы ... :((((((
От: Peregrin  
Дата: 06.10.04 22:17
Оценка: 2 (1) +1
Здравствуйте, Mmmaloy, Вы писали:

M>Вот такая конструкция (в одном файле). Естественно не работает.


M>
M>class A 
M>{
M>   B b; // !!!! // Не видит B
M>};

M>class B
M>{
M>    A a;
M>};
M>


M>Не работает, а хотелось бы. Причем нужно, что бы оба описания класса остались в одном файле.

M>Где-то (могу ошибаться) встречал то-ли макрос, то ли оператор, который прописываля в начале файла, оба класса друг друга видели. Инофо относительно компилятора VC++ 2003 net, MFC

Так сделать нельзя. Для того, чтобы объявить переменную типа B класс B должен быть определен. Соответственно ты не можешь в обоих классах иметь по экземпляру другого. Но ты можешь в одном из них использовать указатель — для этого будет достаточно объявления класса. Можешь например сделать так:
class B; // forward declaration

class A 
{
   B* p_b; // указатель на B использовать можно
};

class B
{
    A a;
};
M>
Re[2]: Классы ... :((((((
От: Mmmaloy Германия  
Дата: 06.10.04 22:28
Оценка:
Повезло мне Мне как раз указатель нужен был. Спасибо всем
Re[2]: Классы ... :((((((
От: Вадим Никулин Россия Здесь
Дата: 07.10.04 06:45
Оценка: :)
Здравствуйте, Chipset2k, Вы писали:

C>
C>class B;
C>class A 
C>{
C>   B b; // !!!! // Не видит B
C>};
C>class B
C>{
C>    A a;
C>};
C>


И чему же будет равен sizeof(A)?
Re[2]: Классы ... :((((((
От: _Jane_ Украина  
Дата: 07.10.04 12:03
Оценка:
Здравствуйте, Chipset2k, Вы писали:

C>
C>class B;
C>class A 
C>{
C>   B * b; // !!!! // Не видит B
C>};
C>class B
C>{
C>    A a;
C>};
C>


Такое только с указателями работает.
Jane
Re[3]: Классы ... :((((((
От: Lorenzo_LAMAS  
Дата: 07.10.04 12:05
Оценка:
_J_>Такое только с указателями работает.

Такое работает также с членами сылками, объявлением статического члена.
Of course, the code must be complete enough to compile and link.
Re: Классы ... :((((((
От: rbu  
Дата: 07.10.04 12:52
Оценка: -6 :)
Напиши так — заработает:

class A;
class B;


clas A
{
B b;
};


class B
{
A a;
};
Re[2]: Классы ... :((((((
От: jazzer Россия Skype: enerjazzer
Дата: 07.10.04 13:25
Оценка: +1 :))) :)
Здравствуйте, rbu, Вы писали:

rbu>Напиши так — заработает:


У тебя, надо думать, заработало, раз постишь?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Классы ... :((((((
От: Lapulya  
Дата: 08.10.04 08:16
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, rbu, Вы писали:


rbu>>Напиши так — заработает:


J>У тебя, надо думать, заработало, раз постишь?


спасибо jazzer, от души посмеялся...
Re[3]: Классы ... :((((((
От: prVovik Россия  
Дата: 10.10.04 12:38
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M> Повезло мне Мне как раз указатель нужен был. Спасибо всем


А иного и не могло быть
Подумай сам: в классе А есть В, в котором есть А, в котором есть В, в котором есть А и так до бесконечности. Разве такое возможно?
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[3]: Классы ... :((((((
От: Кодт Россия  
Дата: 11.10.04 08:14
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M> Повезло мне Мне как раз указатель нужен был. Спасибо всем


Кстати об указателях.
Можно предположить, что у тебя какой-то вариант владения друг другом.
Т.е.
Структура наподобие списка

+---+    0..1 +---+    0..1 +---+
| A |<>------>| B |<>------>| A |...
+---+         +---+         +---+

Агрегация

+---+      1 +---+
| A |<>----->| B |
|   |<-------|   |
+---+ 1      +---+


Есть смысл взглянуть на умные указатели.
Заодно продумать: сколько объектов A могут одномоментно держать указатель на один и тот же объект B (и наоборот).
Перекуём баги на фичи!
Re[2]: Классы ... :((((((
От: Chipset2k Россия http://merlinko.com
Дата: 11.10.04 11:46
Оценка: :))
Здравствуйте, Chipset2k, Вы писали:

C>Здравствуйте, Mmmaloy, Вы писали:


Блин, вы мало того что минусов мне понаставили, так ещё и поржали...
"Всё что не убивает нас, делает нас сильнее..."
Re: Классы ... :((((((
От: ScorpZ Украина  
Дата: 11.10.04 17:08
Оценка: -1
Здравствуйте, Mmmaloy, Вы писали:

M>Вот такая конструкция (в одном файле). Естественно не работает.


M>
M>class A 
M>{
M>   B b; // !!!! // Не видит B
M>};

M>class B
M>{
M>    A a;
M>};
M>


M>Не работает, а хотелось бы. Причем нужно, что бы оба описания класса остались в одном файле.

M>Где-то (могу ошибаться) встречал то-ли макрос, то ли оператор, который прописываля в начале файла, оба класса друг друга видели. Инофо относительно компилятора VC++ 2003 net, MFC

Никакие макросы не нужны , вот так —

extern class B;

class A
{
B b; // !!!! // Не видит B
};

class B
{
A a;
};
Re[2]: Классы ... :((((((
От: Peregrin  
Дата: 11.10.04 20:21
Оценка:
Здравствуйте, ScorpZ, Вы писали:

[]

SZ>Никакие макросы не нужны , вот так -


SZ>extern class B;


SZ>class A

SZ>{
SZ> B b; // !!!! // Не видит B
SZ>};

SZ>class B

SZ>{
SZ> A a;
SZ>};

Компилировать пробовал? Подозреваю, что нет.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.