|
|
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
как можно организовать такое: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 22:08:15 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Элементарно, Ватсон! a.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 22:18:22 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Рекурсия это не очень хорошо, но пока главное чтобы собралось, а я что-то не соображу. Разнес в два разных *.h, все равно не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 23:26:15 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 23:33:41 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > Автор: "Tubrik" > Рекурсия это не очень хорошо, но пока главное чтобы собралось, а я > что-то не соображу. Разнес в два разных *.h, все равно не получается. Достаточно перенести реализацию конструктора ClassA() после определения ClassB. Текст у blinded/b]. Только не забудь написать inline в реализации ClassA::ClassA(). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 03:23:00 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
если я правильно понимаю, то include - это включение текста указанного файла непосредственно в месте include, тогда почему не получается след. сборка (конструкторы вынесены в *.cpp): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. в него включается файл 'a.h' : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. а в "a.h" включается "b.h" т.е. class A уже должен знать о class B ?? но он не знает! пока не убираю комментарий Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 05:55:53 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > если я правильно понимаю, то include - это включение текста указанного > файла непосредственно в месте include, тогда почему не получается след. > сборка (конструкторы вынесены в *.cpp): В таком виде, все должно компилироваться и работать, до тех пор, пока везде подключается a.h, если подключить b.h, работать не будет из-за закомментированного предварительного объявления класса (class B;). Если его раскомментировать, до все будет работать независимо от порядка включения. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 08:08:48 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
зачем ему предварительное объявления класса Б, если там стоит #include "b.h", и первый раз оно должно включиться, а там ему будет полное объявление класса Б Разве не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 08:24:01 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Т.е. разделяй реализацию с определением классов и пользуйся объявлениями требуемых для определений искомых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 09:46:43 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
TubrikРекурсия это не очень хорошо, но пока главное чтобы собралось, а я что-то не соображу. Разнес в два разных *.h, все равно не получается. Рекурсия - совсем не хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 09:47:18 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Tubrik class B уже не может включить в себя 'a.h' благодаря #ifdef , ну это понятно.. Не так. В тест включается a.h, в a.h включается b.h, но в b.h уже не может включиться a.h, и B не знает о A ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 09:50:03 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Tubrikзачем ему предварительное объявления класса Б, если там стоит #include "b.h", и первый раз оно должно включиться, а там ему будет полное объявление класса Б Разве не так? Если ты делаешь include b в a, то в b, проинклуденном в a не сработает include a, и b не будет знать о a . Ферштейн? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 09:52:20 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Akh Tubrikзачем ему предварительное объявления класса Б, если там стоит #include "b.h", и первый раз оно должно включиться, а там ему будет полное объявление класса Б Разве не так? Если ты делаешь include b в a, то в b, проинклуденном в a не сработает include a, и b не будет знать о a . Ферштейн? ;) Чето не андерстенд, надо сделать перекур :) но А знает о Б, зачем ему тогда предварительное объявление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 10:08:44 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Tubrik Akh Tubrikзачем ему предварительное объявления класса Б, если там стоит #include "b.h", и первый раз оно должно включиться, а там ему будет полное объявление класса Б Разве не так? Если ты делаешь include b в a, то в b, проинклуденном в a не сработает include a, и b не будет знать о a . Ферштейн? ;) Чето не андерстенд, надо сделать перекур :) но А знает о Б, зачем ему тогда предварительное объявление? Чтобы не не делать этот инклуд. :) Делая инклуд, ты подсовываешь определение класса B, котоый не определиться, т.к. не знает об A. Т.е. подсовываешь не компилируемый код. Теперь как? Как сделать нормально, причем классы будут равноправны я уже показал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 10:12:39 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Выходит если один класс не определился, то он "тянет" за собой другие классы. Тогда нафига им вообще инклуды, если они инклудят неопределившиеся классы, обошлись бы предварительными объявлениями :) Р. Лафоре пишет, что #ifndef _classx_ #define _classx_ #endif защита от дурака. Что он хочет сказать, что в правильном проекте этого можно избежать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 10:21:51 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
На сарае тоже написано, а там сплошное разочарование. Написание сколько-нибудь значительного проекта без этого невозможно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 10:24:37 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
TubrikВыходит если один класс не определился, то он "тянет" за собой другие классы. Тогда нафига им вообще инклуды, если они инклудят неопределившиеся классы, обошлись бы предварительными объявлениями :) Р. Лафоре пишет, что #ifndef _classx_ #define _classx_ #endif защита от дурака. Что он хочет сказать, что в правильном проекте этого можно избежать? Это риторический вопрос: например, нафига for, если но по сетке файл не пересылает? Вполне возможно, что можно избежать, но геморно. Если ты инклудишь два файла, каждый из которых инклудит какой-то третий, то без этой конструкции не обойтись. Может и можно построить схему в который подобное пройдет, но это будет совсем не гуд. Так что мистер "Р. Лафоре" (не знаю хто это такой) не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 10:26:12 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
теперь возникла проблема в классах-потомках, предварительного объявления при наследовании им кажется не достаточно, что тут можно придумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 19:32:08 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Код в студию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 19:41:06 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
ка бы тут я не напутал.. уже голова кругом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 20:01:56 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Нет, так не пойдет,тобы отнаследоваться надо видеть определение класса, форфардом не отделаешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 20:13:32 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Но ничего невозможного нет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 20:20:49 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Что-то не получается собрать такой вариант.. И еще стало интересно, немного изменил код примера и стало непонятно, почему теперь класс Z не может собраться, если я включаю в его .h-нике #include "a.h", а зависимость от класса А закомментил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 20:34:54 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
убираю #include "a.h" и все пахает как надо. Чувство у меня такое, что пора уже сворачивать "гениальную задумку" и делать все включение линейным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 20:41:54 |
|
||
|
перекрестные ссылки в классах
|
|||
|---|---|---|---|
|
#18+
Ну дословно у тебя там где инклудится a.h получается Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 20:43:58 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34934073&tid=2027788]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
244ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 540ms |

| 0 / 0 |
