Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шабл.класс "Матрица".Помогите сделать пожалуйста! 
V
    Опции темы
fish9370
Дата 12.6.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(yorgan @  12.6.2008,  11:10 Найти цитируемый пост)
А какая разница описан ли шаблонный класс на языке С++ или в двоичном коде?


а какая разница между типом int и переменной в памяти, которую создал компилятор с помощью типа int?

1. шаблон - это тип, передав определенные параметры в которй можно получить экземпляр объекта в памяти..
2. информация о типе никогда не содержится в бинарном файле..
3. экземпляр объекта - это двоичные данные в памяти (которые можно записать в двоичную библиотеку)
4. компилятор работает с исходным текстом, а процесс перевода (трансляции) из исходного текста в бинарный (машинный) код называется компиляцией..

исходя из выше сказанного ответь на свой вопрос сам..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
yorgan
Дата 13.6.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



хорошо...
Я так понял не только шаблонный, но и простой класс нельзя сделать библиотекой?
Если да, то можно пример: что тогда можно сделать библиотекой?
PM MAIL   Вверх
JackYF
Дата 14.6.2008, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(yorgan @  13.6.2008,  19:17 Найти цитируемый пост)
но и простой класс нельзя сделать библиотекой?

Неверно. Можно.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
yorgan
Дата 14.6.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Цитата(JackYF @  14.6.2008,  01:10 Найти цитируемый пост)
Неверно. Можно. 

ну, так библиотека из класса тоже будет бинарной... почему же тогда компилятор не сможет прочесть бинарную библиотеку с шаблонным классом, а с обычным классом сможет?
PM MAIL   Вверх
LavYaAll
Дата 14.6.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



yorgan
Шаблон не компилируется, если не создан его экземпляр на основе какого-либо типа/класса. Компилятор его просто проигнорирует в этом случае. А это значит, что файл, полученный после компиляции не будет содержать информацию о шаблоне. Теперь ответь на вопрос. Как можно импортировать из библиотеки то, чего там нет?
Цитата(yorgan @  13.6.2008,  22:17 Найти цитируемый пост)
класс нельзя сделать библиотекой?

Можно. Потому что класс компилируется и заносится в файл, полученный после компиляции. И все же эти слова режут слух. Никто не делает класс библиотекой. Ты создаешь, к примеру, проект DLL(динамическая библиотека), а далее в нем описываешь класс, который при помощи директив __declspec(dllexport) или .DEF файла экспортируешь из этой библиотеки, если конечно хочешь. В библиотеке может быть сколько угодно классов. Да и не только классы могут быть, а еще и просто функции, переменные, ресурсы наконец.

PS. Про библиотеки можно почитать детально в книге: Дж. Рихтер - Windows для профессионалов Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows

Это сообщение отредактировал(а) LavYaAll - 14.6.2008, 19:41
PM   Вверх
bsa
Дата 14.6.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(yorgan @ 13.6.2008,  20:17)
Я так понял не только шаблонный, но и простой класс нельзя сделать библиотекой?

Видимо, ты не очень представляешь себе, что такое класс. Попробую объяснить на пальцах. Вот есть код:
Код
class MyClass
{
public:
   int x;
};
Для него не нужна библиотека, так как в библиотеки помещаются статические переменные класса и методы. Теперь напишем функцию, которая будет работать с экземляром этого класса:
Код
class MyClass
{
public:
   int x;
};
...
int my_func(MyClass *mc)
{
   mc->x = 1;
   return mc->x;
}
Вот эта функция и может быть размещена в библиотеке, это не удивляет, надеюсь?
Код
class MyClass
{
public:
   int x;
   int my_func();
};
...
int MyClass::my_func()
{
   this->x = 1;
   return x;
}
А теперь подумаем, что такое метод. И что такое указатель this. Оказывается, любому нестатическому методу в виде первого скрытого параметра передается указатель на экземляр класса. Т.е. в машинном коде эта функция будет выглядеть, как во втором примере!
PM   Вверх
yorgan
Дата 15.6.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Вот попытался в Вижуал студио 2005 создать библиотеки. Делал библиотеки из шаблонного класса, обычного класса и просто библиотека, которая содержала в себе одну функцию, возводящую в квадрат число типа инт. Везде результат один и тот же, а именно 100 ошибок smile
Вот видно все на скриншоте:

user posted image


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" или похожие...

Что я не правильно делаю?
PM MAIL   Вверх
JackYF
Дата 16.6.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Во-первых, далеко не обязательно делать скриншот - не у всех толстые инет-каналы. Достаточно скопировать текст.

Во-вторых, библиотеки не включаются директивой #include, они включаются в найстроках линковки проекта.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
LavYaAll
Дата 16.6.2008, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



yorgan, если ты создал статическую библиотеку *.lib, то подключить ее можно через Project--->Add Existing Item---->(выбираешь файл статической библиотеки) Только не забудь в фильтре указать: "All files", чтоб отобразились все файлы папки.

Это сообщение отредактировал(а) LavYaAll - 16.6.2008, 08:10
PM   Вверх
yorgan
Дата 16.6.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Спасибо. Теперь работает.
PM MAIL   Вверх
yorgan
Дата 19.6.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Правильно ли я понял, что можно сделать так:
Запихать в хедер файл само описание шаблонного класса, а в *.lib его методы? и будет работать?)
PM MAIL   Вверх
bsa
Дата 19.6.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(yorgan @ 19.6.2008,  23:17)
Правильно ли я понял, что можно сделать так:
Запихать в хедер файл само описание шаблонного класса, а в *.lib его методы? и будет работать?)

нет. нельзя в lib файл запихать методы шаблонного класса. Они должны быть в заголовочном файле
PM   Вверх
yorgan
  Дата 20.6.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Т.е. единственное, что можно это сделать из шаблонного класса хедер файл?
У меня преподаватель спросил, а как тогда организовывается библиотека STL, если из шаблонных классов нельзя создать библиотеку?
PM MAIL   Вверх
bsa
Дата 20.6.2008, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(yorgan @ 20.6.2008,  08:17)
У меня преподаватель спросил, а как тогда организовывается библиотека STL, если из шаблонных классов нельзя создать библиотеку?

Из шаблонных классов нельзя создать БИНАРНУЮ библиотеку.
А просто библиотека может поставляться и в виде набора заголовочных файлов (boost::spirit, например). Как вариант, можно найти нешаблонную часть твоего шаблона, выделить ее и поместить в cpp файл. Но это очень редко выходит.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1000 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.