| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как предварительно описать струкутру |
| Автор: nns2009 3.10.2011, 18:19 | ||
Сейчас пишу геометрию, и мне нужно чтобы структура Line имела доступ к Vector и наоборот.
Пробовал написать так, как показал (предварительно объявить структуры (struct Line; struct Vector;) ), но в ответ мне выдаётся ошибка начиная с выделенной строчки. Где я ошибся и что надо исправить? |
| Автор: boostcoder 3.10.2011, 18:31 |
самое время обобщить схожие моменты и вынести их в общий базовый тип. Добавлено через 1 минуту и 20 секунд потому что использовать Vector можно после описания реализации, а не форварда. |
| Автор: boostcoder 3.10.2011, 18:39 |
- Добавлено через 1 минуту и 1 секунду взаимная зависимость - это не хорошо. |
| Автор: newbee 3.10.2011, 19:18 | ||
Выноси объявления структур в .h-файл(ы), а реализацию методов - в .cpp.
Добавлено через 1 минуту и 52 секунды Собственно в разные файлы выносить даже не обязательно. Суть: сначала в исходнике должны быть полностью объявлены обе структуры, а ниже может быть реализован код методов. |
| Автор: mes 3.10.2011, 19:27 | ||
| вынести реализацию в .cpp , куда и включать нужные хидеры.. в остальных местах использовать forward declaration.. Добавлено через 3 минуты и 27 секунд
в данном вопросе это не лучшее решение.. Добавлено через 4 минуты и 37 секунд newbee, а ньюби оказывается уже все написала.. Добавлено через 7 минут и 1 секунду т.е. нужно не искать базовый класс, а наоборот, выделить еще один (после-) слой, в который и вынести операции по взаимной геометрии.. |
| Автор: math64 4.10.2011, 17:12 | ||||||
gcc такое компирирует:
Т.е. для вложенного класса без полей достаточно только предварительного объявления, чтобы его копировать. (не проверял, как ведут другие компиляторы) Но если добавить поля, уже не компилируется:
Добавлено @ 17:20 Так тоже компилируется:
т.е. нужно чтобы вложенные классы не обращались к внешнему |
| Автор: xvr 5.10.2011, 13:45 | ||
Должны так же. В С++ (по стандарту) тела функций-членов компилируются в контексте полного описания класса, к которому они принадлежат. Т.е. включая и то, что определено в классе после них. |
| Автор: newbee 5.10.2011, 13:55 |
| Мда, в этом все С++-сники. Половина работы - борьба с языком. |
| Автор: math64 5.10.2011, 14:23 | ||||
Всё таки не понятно тогда, почему мой второй пример не компилируется - т.е. функции-члены вложенного класса компилируются в контексте когда уже имеются полные описания вложенных классов, но для внешнего класса ещё полного описания нет. T.о. если топик-стартер хочет программировать в стиле C#, он может поместить свои классы во внешний класс:
|
| Автор: xvr 5.10.2011, 17:41 | ||
|