Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Как вынести описание класса" в h или че ваще? / 12 сообщений из 12, страница 1 из 1
15.02.2005, 11:44
    #32915975
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
Пишу на билдере 6. Нужно мне сделать класс который будет хранить значения некоторых сваойств. Написал как полагается: декларация в h, реализация в cpp. Делаю попытку использовать свой класс из другого модуля, подключая заголовочный файл пишет:

Код: plaintext
1.
2.
3.
4.
Build
  [Linker Error] Unresolved external 'TPropertyList<int>::~TPropertyList<int>()' referenced from C:\PROGRAM FILES\CBUILDER6\PROJECTS\PROPERTYLIST\UNIT1.OBJ
  [Linker Error] Unresolved external 'TPropertyList<int>::TPropertyList<int>()' referenced from C:\PROGRAM FILES\CBUILDER6\PROJECTS\PROPERTYLIST\UNIT1.OBJ
  [Linker Error] Unresolved external 'TPropertyList<int>::operator [](System::AnsiString)' referenced from C:\PROGRAM FILES\CBUILDER6\PROJECTS\PROPERTYLIST\UNIT1.OBJ

Если объеденить декларацию с реализацией в cpp (как в прикрепленной файле), то все работает как надо.

Подскажите я что-то не так делаю????
...
Рейтинг: 0 / 0
15.02.2005, 12:03
    #32916035
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
//---------------------------------------------------------------------------


#pragma hdrstop

#include <Classes.hpp>
//#include "PropertyList.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

template <class T>
struct TProperty {
  AnsiString Name;
  T Value;
};

template <class T>
class TPropertyList
{
 private:
   TList * FList;
   int Add(AnsiString Name, T Value);
   int IndexOf(AnsiString Name);
 public:
   TPropertyList ();
   ~TPropertyList ();
   T & operator[](AnsiString Name);
};


template <class T>
int TPropertyList<T>::Add(AnsiString Name, T Value)
{
  TProperty<T> * newp = new TProperty<T>;

  newp->Name = Name;
  newp->Value = Value;

  return FList->Add((void *)newp);
}

//---------------------------------------------------------------------------
template <class T>
int TPropertyList<T>::IndexOf(AnsiString Name)
{
  for (int i= 0 ; i<FList->Count; i++) {
    if (((TProperty<T> *)FList->Items[i])->Name == Name) return i;
  }

  return - 1 ;
}

//---------------------------------------------------------------------------
template <class T>
TPropertyList<T>::TPropertyList ()
{
  FList = new TList;
}

//---------------------------------------------------------------------------
template <class T>
TPropertyList<T>::~TPropertyList ()
{
  FList->Free();
}

//---------------------------------------------------------------------------
template <class T>
T & TPropertyList<T> :: operator[](AnsiString Name)
{
  T * newv = new T;

  int index = (IndexOf(Name));
  if (index == - 1 ) index = Add(Name, *newv);

  return ((TProperty<T> *)FList->Items[index])->Value;
}
//---------------------------------------------------------------------------

...
Рейтинг: 0 / 0
15.02.2005, 12:04
    #32916039
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
1. В cpp-файле не забудь include на h-файл.
2. cpp-файл не забудь подключить в проект
...
Рейтинг: 0 / 0
15.02.2005, 12:06
    #32916053
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
SnowMan21. В cpp-файле не забудь include на h-файл.
2. cpp-файл не забудь подключить в проект

я ставил инклуд на хеадер! и цпп к проекту подключал. Вот такая хрень. ;-(
...
Рейтинг: 0 / 0
15.02.2005, 12:17
    #32916098
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
кстати, нашел в нете класс для работы с матрицами (умножение, транспонирование и т.д.) дык он тоже почему-то оформлен как один cpp файл. Что это за напасть такая...
...
Рейтинг: 0 / 0
15.02.2005, 13:09
    #32916262
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
а я вот все в .h пишу.
это плохо?
...
Рейтинг: 0 / 0
15.02.2005, 13:28
    #32916327
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
если все спихивать в один файл, то получается что код класса появляется в каждом модуле, к которому подключается и компилируется столько же раз... а в общем все нормально :).
...
Рейтинг: 0 / 0
15.02.2005, 13:57
    #32916445
STINGO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
поробуй грохнуть UNIT1.OBJ файл
...
Рейтинг: 0 / 0
15.02.2005, 14:00
    #32916454
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
не, не помогает. Это ж линкер ошибку выдает... т.е. уже после создания obj'а
...
Рейтинг: 0 / 0
15.02.2005, 14:25
    #32916558
STINGO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
обрати внимание: без шаблонов всё работает!
...
Рейтинг: 0 / 0
15.02.2005, 14:36
    #32916599
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
STINGOобрати внимание: без шаблонов всё работает!

Да, уже обратил :)

плюнул и убрал шаблон... на крайняк буду использовать Variant.
...
Рейтинг: 0 / 0
15.02.2005, 14:58
    #32916686
DocenT_ow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Как вынести описание класса" в h или че ваще?
Я тут с одним типом посоветовался....

шаблоны это что-то вроде макросов, и поэтому необходима перекомпиляция класса каждый раз, из этого следует, что включение реализации класса в h - ничего страшного, а перенос в cpp (если бы даже это было возможно) ничего бы не изменил.

посмотрел на исходник шаблона vector из stl там тоже только заголовок с инлайн реализацией. я думаю, что корпорации HP можно доверять.

Пишите, люди, шаблоны класов в заголовках!!!!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Как вынести описание класса" в h или че ваще? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]