8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
|
|||||||||||
1 | |||||||||||
Взаимный include без использования cpp-файлов10.07.2014, 02:45. Показов 1442. Ответов 14
Метки нет (Все метки)
Возможно ли связать два класса реализованных в .h-файлах, чтобы не приходилось переносить реализацию в файлы cpp?
Эти 2 класса: Object.h
0
|
10.07.2014, 02:45 | |
Ответы с готовыми решениями:
14
Взаимный include Заставить видеть .cpp файл без использования Project->Add to project Шифрование данных без использования файлов Поиск файлов без использования класса Directory |
4 / 4 / 1
Регистрация: 23.05.2013
Сообщений: 37
|
|
10.07.2014, 04:58 | 2 |
Ну, для вызова этих модулей все-равно понадобится использование основного .cpp файла
Так что думаю, что нет, нельзя. Да и зачем?
1
|
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
||||||
10.07.2014, 08:15 | 4 | |||||
Странная какая-то у Вас иерархия классов.
Коли Object базовый класс, то он не может знать имени производного класса:
0
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
10.07.2014, 08:54 | 6 |
а компилятор не зациклится от того что два файла ссылаются друг на друга?
0
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
10.07.2014, 09:54 | 7 |
зацикливается. include guard http://ru.wikipedia.org/wiki/Include_guard помогает решить эту проблему
0
|
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
|
|
10.07.2014, 12:03 [ТС] | 8 |
Ну это само собой понятно. Просто имел в виду, чтобы не приходилось создавать Object.cpp и String.cpp с реализацией методов (Все решения в интернете подразумевают перенос реализации в cpp). Ибо очень много неудобно будет.
А почему? В Java такое работает. Как? Компилятор ругается в Object.h на строчках где есть String, что ничего не знает про этот String
0
|
10.07.2014, 12:24 | 9 |
Я не имел в виду твой не рабочий вариант, я имею в виду что вообще это возможно.
Твой вариант не будет работать даже в .cpp модулях. Исправляй ошибки о которых уже сказали и пиши реализацию в заголовочных файлах.
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
10.07.2014, 16:48 | 13 |
0
|
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
|
||||||
10.07.2014, 19:10 | 15 | |||||
Сообщение было отмечено QGuest как решение
Решение
Это специфика C++.
В C++ тоже работает: Кликните здесь для просмотра всего текста
В данном случае порядок должен быть такой: Обычно в *.h: 1. Объявление класса String. ( class String; ) 2. Определение класса Object. 3. Определение класса String. В определениях классов по разным причинам желательны только объявления методов и данных. Обычно в *.cpp: 4. Определение методов класса Object; 5. Определение методов класса String; Определение методов Object будет использовать определение класса String. Если определение такого метода совместить с объявлением метода внутри определения класса Object, то возникнет ошибка, т.к. доступно будет лишь объявление класса String, но не его определение. Следовательно, его структура класса String неизвестна компилятору C++. Поэтому определение методов выносится в файлы *.cpp, где все определения классов будут доступны из заголовков (*.h файлов). Компилятор Java способен откладывать компиляцию определений методов до полного определения классов, поэтому там такой проблемы нет и разделение на *.h и *.cpp не нужно.
1
|
10.07.2014, 19:10 | |
10.07.2014, 19:10 | |
Помогаю со студенческими работами здесь
15
Аплоад файлов на сервер без использования компонент Проигрывание Flash-роликов без использования временных файлов Диалоги Windows API без использования файлов ресурсов Проигрывание Flash-роликов без использования временных файлов Как просматривать GIF файлы без использования дополнительных файлов? Удалить числа из файла, без использования дополнительных массивов и файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |