74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Использование .h и .cpp для классов28.10.2012, 00:23. Показов 2955. Ответов 17
Метки нет (Все метки)
CSentence.h
CSentence.cpp
CSense_Sentence.h
CSense_Sentence.cpp
0
|
28.10.2012, 00:23 | |
Ответы с готовыми решениями:
17
Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов Использование различных свойств наследования для расширения и уточнения классов Использование функции cpp в проекте c Использование в CPP переменной, описанной в H |
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
28.10.2012, 00:28 | 2 |
class CSense_Sentence; — это не определение класса, а его объявление. Просто чтобы чёртов однопроходный компилятор не пугался, когда встретит это имя. Это разрешает только упоминать класс, но не использовать его.
Проинклудьте в CSentence.h файл CSense_Sentence.h, который содержит определение класса. И include-guards не забудьте, чтобы не проинлудить его дважды.
0
|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
28.10.2012, 00:30 [ТС] | 3 |
~OhMyGodSoLong~, а как правильно сделать без иклюд-гуарда?
Ведь можно же представить код так, что бы каждый файл включался 1 раз, просто потому, что он включается 1 раз?
0
|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
28.10.2012, 00:33 [ТС] | 5 |
Croessmah, то есть лучше следовать логике: "защищай и не парься"?
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
28.10.2012, 00:34 | 6 |
Можно.
#pragma onceв начале файла. Большинство компиляторов умеют и понимают. Хотя для тех, кто не понимает, после прагмы обычно всё равно на всякий случай ставят инклюд-гард. А, вы про то, чтобы руками следить. Да господи, хотите об этом думать вместо того, чтобы один раз написать три строки и забыть, — пожалуйста. В принципе можно, но это вредит читабельности и нервам.
0
|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
28.10.2012, 00:37 [ТС] | 8 |
~OhMyGodSoLong~, прагма - это тот же инклюд-гуард, только пишется по-другому
Я имею ввиду, расположить файлы так, что бы они по-любому включались только 1 раз ну вот пишешь, к примеру есть 3 независимых файла. #include "A.h" #include "B.h" #include "C.h" и А не включится 2 раза, поскольку включение написано только 1 раз.
0
|
I.M.
|
28.10.2012, 00:49
#10
|
Не по теме: Kgfq, а чем вам там include guard'ы не угодили, что вы решили устроить свою маленькую революцию против них? У нас на собеседовании, например, среди прочего смотрят и на наличие include guard в коде соискателя.
0
|
Kgfq
|
28.10.2012, 00:51
[ТС]
#11
|
Не по теме: I.M., полагаясь на автоматику мы теряем способности. В данном случае к контроллю кода.
0
|
I.M.
|
28.10.2012, 00:54
#13
|
Не по теме: Kgfq, вы просто оперируете маленькими проектами, где вы сам - царь и бог. Представьте, что вы работаете в команде. И проект, соответственно, крупный. Там наличие include guard просто жизненно необходимо
1
|
John Prick
|
28.10.2012, 00:55
#14
|
1
|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
28.10.2012, 02:31 [ТС] | 15 |
Не по теме: John Prick, Добавлено через 1 час 34 минуты Получается, что одна и та же переменная определена в A.obj и Main.obj. Линкер выдает ошибку. Как с этим бороться?
0
|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
28.10.2012, 03:07 [ТС] | 17 |
Croessmah, тогда придется где-то в левом файле определять эту переменную. Иначе - никак?
0
|
Неэпический
|
|||||||||||
28.10.2012, 03:41 | 18 | ||||||||||
в *.h файле пишите
1
|
28.10.2012, 03:41 | |
28.10.2012, 03:41 | |
Помогаю со студенческими работами здесь
18
Использование указателя AP в main.cpp крашит приложение Использование параметра экземпляра класса из другого cpp Использование двух cpp файлов вместо switch case Использование классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |