powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Как вынести описание класса" в h или че ваще?
12 сообщений из 12, страница 1 из 1
"Как вынести описание класса" в h или че ваще?
    #32915975
DocenT_ow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу на билдере 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
"Как вынести описание класса" в h или че ваще?
    #32916035
DocenT_ow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
"Как вынести описание класса" в h или че ваще?
    #32916039
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В cpp-файле не забудь include на h-файл.
2. cpp-файл не забудь подключить в проект
...
Рейтинг: 0 / 0
"Как вынести описание класса" в h или че ваще?
    #32916053
DocenT_ow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SnowMan21. В cpp-файле не забудь include на h-файл.
2. cpp-файл не забудь подключить в проект

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

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

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

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

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

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


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