Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
Не могу понять, почему имея два класса я должен указывать что переменная - это класс? Доки перечитал много - везде рекомендуют либо упороться веществами и разводить сотнями дефайнов либо для каждого класса описывать предопределенный класс. Т.е. это не скомпилируется если не раскомментировать предварительное объявление. Ship.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. Planet.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вроде перечитал все что можно было, понятно что чтобы собрать класс ему нужно знать размер переменной. Но ведь он же может сам пойти в соседний файл посмотреть, зачем ему указывать каждый раз? Или может я запутался и неправильно сделал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 11:42 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
Ciplusor, давайте думать логически компилятор же должен знать сколько места выделять в структуре под элемент? откуда он это узнаёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 11:46 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), ну как откуда, в соседнем юните написано что TShip - class. Зачем ему второй раз это говорить но уже в области именно его юнита? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 11:53 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
Изи. Ship.h Код: plaintext 1. 2. 3. 4. 5. Planet.h Код: plaintext 1. 2. 3. 4. 5. И безо всяких инклудов. Инклуды понадобятся только в .cpp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 12:02 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
Ciplusor, просто посмотри как у тебя раскроется Код: plaintext 1. 2. и наоборот Код: plaintext 1. 2. в идеале должно получиться либо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. либо соответственно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 12:04 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Можно без форвардных объявлений обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 12:05 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
Ciplusor...в соседнем юните написано... так это не работает... стэпы компиляции: компилятор честно берёт файлик и всё что в нём указано в инклудах - он честно инклудит. Сам процесс инклуда - прочитать файлик, распотрошить, все переменные и определения сложить в память перед компиляцией. на момент компиляции кода, все переменные должны быть объявлены тем или иным способом. И компилятор, как дисциплинированный юзверь не полезет перебирать список файликов в поисках того что ему нуна... как то так (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 12:06 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
NekZ, большое спасибо, "изи" вариант легко зашел. Странно что я не натыкался на такое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 12:11 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
NekZkealon(Ruslan), Можно без форвардных объявлений обойтись не знал, занятно что это древняя штука из C, а не плюсов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 12:24 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)не знал, занятно что это древняя штука из C, а не плюсов В C можно точно так же, только там слово struct :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 13:17 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
А вообще для читаемости кода лучше форвардные объявления выносить отдельно. Тогда глаз сразу видит что есть взаимные зависимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 13:18 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)не знал, занятно что это древняя штука из C, а не плюсов Недавно подобный код мне мозг сломал. Приходится юзать одну сишную либу, в хедере которой есть подобное определение Код: plaintext 1. При учёте, что struct foo больше нигде не был замечен. То есть сразу имеешь тип указателя на структуру в контексте, но самого типа структуры нет. Поскольку, для работы с этим хэндлом выставлены сишные функции для создания и удаления, решил завернуть это в std::shared_ptr для безопасного освобождения ресурсов кастомным делитером. Пришлось это организовать так: Код: plaintext 1. 2. 3. 4. В общем, плюсовый мир полон открытий даже для опытных разработчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 13:35 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
NekZ[В общем, плюсовый мир полон открытий даже для опытных разработчиков. Не надо меня пугать, мне и так тут страшно, как по минному полю 8( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2018, 13:45 |
|
||
|
Перекрестные ссылки
|
|||
|---|---|---|---|
|
#18+
CiplusorНе могу понять, почему имея два класса я должен указывать что переменная - это класс? Доки перечитал много - везде рекомендуют либо упороться веществами и разводить сотнями дефайнов либо для каждого класса описывать предопределенный класс. Т.е. это не скомпилируется если не раскомментировать предварительное объявление. Ship.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. Planet.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. Да, не скомпилируется. Потому что любой идентификатор должен быть объявлен , чтобы компилятор мог его использовать. По-моему это вполне естественно. Конкретно это называется forward declaration класса (структуры). CiplusorВроде перечитал все что можно было, понятно что чтобы собрать класс ему нужно знать размер переменной. Но ведь он же может сам пойти в соседний файл посмотреть, зачем ему указывать каждый раз? Или может я запутался и неправильно сделал? Не может. Каждый иходный файл компилируется независимо и отдельно от другого. Ты можешь стереть тот другой файл, скомпилировать этот, он скомпилируется. Затем восстановить тот, а этот удалить, и тот тоже скомпилировать. Всё будет работать (компилироваться). Ты можешь два исходника разложить на две разных машины, не связанные по сети, скомпилировать, объектные файлы принести на одну машину и собрать вместе в программу. Такая вот модель компиляции/сборки в С и С++. Называется "раздельная компиляция". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 00:16 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=18&tid=2017818]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 279ms |
| total: | 416ms |

| 0 / 0 |
