Вот такая конструкция (в одном файле). Естественно не работает.
class A
{
B b; // !!!! // Не видит B
};
class B
{
A a;
};
Не работает, а хотелось бы. Причем нужно, что бы оба описания класса остались в одном файле.
Где-то (могу ошибаться) встречал то-ли макрос, то ли оператор, который прописываля в начале файла, оба класса друг друга видели. Инофо относительно компилятора VC++ 2003 net, MFC
Здравствуйте, 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;
};
Здравствуйте, 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 declarationclass A
{
B* p_b; // указатель на B использовать можно
};
class B
{
A a;
};
M>
Здравствуйте, Mmmaloy, Вы писали:
M> Повезло мне Мне как раз указатель нужен был. Спасибо всем
А иного и не могло быть
Подумай сам: в классе А есть В, в котором есть А, в котором есть В, в котором есть А и так до бесконечности. Разве такое возможно?
Здравствуйте, Mmmaloy, Вы писали:
M> Повезло мне Мне как раз указатель нужен был. Спасибо всем
Кстати об указателях.
Можно предположить, что у тебя какой-то вариант владения друг другом.
Т.е.
Структура наподобие списка
+---+ 0..1 +---+ 0..1 +---+
| A |<>------>| B |<>------>| A |...
+---+ +---+ +---+
Агрегация
+---+ 1 +---+
| A |<>----->| B |
| |<-------| |
+---+ 1 +---+
Есть смысл взглянуть на умные указатели.
Заодно продумать: сколько объектов A могут одномоментно держать указатель на один и тот же объект B (и наоборот).
Здравствуйте, 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