![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
а какая разница между типом int и переменной в памяти, которую создал компилятор с помощью типа int? 1. шаблон - это тип, передав определенные параметры в которй можно получить экземпляр объекта в памяти.. 2. информация о типе никогда не содержится в бинарном файле.. 3. экземпляр объекта - это двоичные данные в памяти (которые можно записать в двоичную библиотеку) 4. компилятор работает с исходным текстом, а процесс перевода (трансляции) из исходного текста в бинарный (машинный) код называется компиляцией.. исходя из выше сказанного ответь на свой вопрос сам.. -------------------- undefined |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
хорошо...
Я так понял не только шаблонный, но и простой класс нельзя сделать библиотекой? Если да, то можно пример: что тогда можно сделать библиотекой? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
||||
|
||||
LavYaAll |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 62 Регистрация: 1.5.2008 Репутация: 1 Всего: 1 |
yorgan,
Шаблон не компилируется, если не создан его экземпляр на основе какого-либо типа/класса. Компилятор его просто проигнорирует в этом случае. А это значит, что файл, полученный после компиляции не будет содержать информацию о шаблоне. Теперь ответь на вопрос. Как можно импортировать из библиотеки то, чего там нет? Можно. Потому что класс компилируется и заносится в файл, полученный после компиляции. И все же эти слова режут слух. Никто не делает класс библиотекой. Ты создаешь, к примеру, проект DLL(динамическая библиотека), а далее в нем описываешь класс, который при помощи директив __declspec(dllexport) или .DEF файла экспортируешь из этой библиотеки, если конечно хочешь. В библиотеке может быть сколько угодно классов. Да и не только классы могут быть, а еще и просто функции, переменные, ресурсы наконец. PS. Про библиотеки можно почитать детально в книге: Дж. Рихтер - Windows для профессионалов Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows Это сообщение отредактировал(а) LavYaAll - 14.6.2008, 19:41 |
|||
|
||||
bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Видимо, ты не очень представляешь себе, что такое класс. Попробую объяснить на пальцах. Вот есть код:
|
||||||||
|
|||||||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Вот попытался в Вижуал студио 2005 создать библиотеки. Делал библиотеки из шаблонного класса, обычного класса и просто библиотека, которая содержала в себе одну функцию, возводящую в квадрат число типа инт. Везде результат один и тот же, а именно 100 ошибок
![]() Вот видно все на скриншоте: ![]() http://dump.ru/file_catalog/650099 или http://slil.ru/25898509 Делал таким образом: Create Project в Start Page, далее в Project Types выбирал Visual C++: Win32 -> Win32 Consol Application. Далее Static Library и галочка только на Precompiled header. В проекте создавал один файл .cpp или .h куда помещал код класса (функции), и еще один файл .cpp, куда инклюдом подключал первый файл с кодом класса(функции). Библиотека компилилась без ошибок и предупреждений. Но во всех случаях результат один - ошибки типа "Error C2018 unkonwn character 0x10" или похожие... Что я не правильно делаю? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
Во-первых, далеко не обязательно делать скриншот - не у всех толстые инет-каналы. Достаточно скопировать текст.
Во-вторых, библиотеки не включаются директивой #include, они включаются в найстроках линковки проекта. |
|||
|
||||
LavYaAll |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 62 Регистрация: 1.5.2008 Репутация: 1 Всего: 1 |
yorgan, если ты создал статическую библиотеку *.lib, то подключить ее можно через Project--->Add Existing Item---->(выбираешь файл статической библиотеки) Только не забудь в фильтре указать: "All files", чтоб отобразились все файлы папки.
Это сообщение отредактировал(а) LavYaAll - 16.6.2008, 08:10 |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Спасибо. Теперь работает.
|
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Правильно ли я понял, что можно сделать так:
Запихать в хедер файл само описание шаблонного класса, а в *.lib его методы? и будет работать?) |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
нет. нельзя в lib файл запихать методы шаблонного класса. Они должны быть в заголовочном файле |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Т.е. единственное, что можно это сделать из шаблонного класса хедер файл?
У меня преподаватель спросил, а как тогда организовывается библиотека STL, если из шаблонных классов нельзя создать библиотеку? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Из шаблонных классов нельзя создать БИНАРНУЮ библиотеку. А просто библиотека может поставляться и в виде набора заголовочных файлов (boost::spirit, например). Как вариант, можно найти нешаблонную часть твоего шаблона, выделить ее и поместить в cpp файл. Но это очень редко выходит. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |