![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Gryphon |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 20.3.2006 Где: Москва Репутация: нет Всего: нет |
Вопрос: как правильно писать программу с описанием и реализацией класса в отдельных файлах?
С такой проблемой столкнулся: Matrix.h
Matrix.cpp
main.cpp
При компиляции на вызовах конструктора и функции из main вылезают ошибки линковки. Не видит реализации в Matrix.cpp, короче. Доктор, в чём ошибка, кроме генов?) Это сообщение отредактировал(а) Gryphon - 2.5.2008, 10:32 |
||||||
|
|||||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
Matrix.h
файл Matrix.cpp должен быть включен в проект |
|||
|
||||
Gryphon |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 20.3.2006 Где: Москва Репутация: нет Всего: нет |
0) Вектор я забыл убрать, он там по ходу в реализации понадобится) 1) Всегда использую шапку
Почему это не правильно? 2) Разумеется, Matrix.cpp в проекте. 3) Ничего не изменилось(
Нельзя ли поподробнее объяснить, для чего это надо, пожалуйста? 4) Интересно... Убрал из проекта всё, кроме написанго в посте, заработало. Сейчас буду смотреть. Это сообщение отредактировал(а) Gryphon - 2.5.2008, 10:33 |
||||||||
|
|||||||||
Gryphon |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 20.3.2006 Где: Москва Репутация: нет Всего: нет |
Так, всё любопытственнее и любопытственнее... Итак, проект, в котором нет ничего, кроме написанного в посте, работает. Мой изначальный проект, в котором была проблема, посложнее. Я просто не стал писать сюда весь код. А теперь приближение к нему, в котором появляестя описанная проблема:
Matrix_NxN.h
Matrix_NxN.cpp
main.cpp
Не удивляйтесь vector'у и шаблону — это всё нужно для нормальной реализации, код которой здесь приводить ни к чему. Тестовый проект с кодом, написанном в этом посте, выдаёт пресловутую ошибку линковки. Изменение Matrix_NxN.h на
не меняет ничего. Если реализация функций не в Matrix_NxN.cpp, а в main.cpp, всё работает. В чём может быть дело? Это сообщение отредактировал(а) Gryphon - 2.5.2008, 11:04 |
||||||||
|
|||||||||
Carnifex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 1.5.2008 Репутация: нет Всего: нет |
В нереализованном экспорте шаблонов. Как работает, так и пиши. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
||||
|
||||
Gryphon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 20.3.2006 Где: Москва Репутация: нет Всего: нет |
Спасибо большое! 8)
![]() |
|||
|
||||
vasmt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 8.10.2007 Репутация: нет Всего: 1 |
Возвращаясь к теме. Можно ли узнать, в каких еще случаях нельзя использовать описание и реализацию класса в разных файлах.
Спасибо |
|||
|
||||
bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В случае встраиваемых функций/методов (inline).
Итак, в заголовочных файлах подключать нужно то и только то, что тебе нужно (ни больше, ни меньше), так как подключив заголовочный файл пользователь ожидает, что проблем с ним не будет (все должно компилироваться без лишних телодвижений), но в то же время, это не сильно влияло на время сборки (в С++ довольно сложный синтаксис для разбора, особенно, у шаблонов, поэтому большое количество шаблонных файлов компилируется очень долго). using namespace в заголовочном файле использовать вообще очень вредно (если только внутри методов, классов или пространств имен), т.е. чтобы никто, кто подключил твой заголовочный файл случаем не получил в открытом доступе методы и классы стандартного пространства имен. Я, например, всегда использую приставки (std::, например). Исключением являются длинные названия пространств имен, но для них я локально делаю псевдонимы (например: namespace popt = boost::program_options;). Это позволяет при последующем чтении кода точно знать, что именно я использую в данном месте. Это сообщение отредактировал(а) bsa - 9.6.2008, 12:35 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |