G
Guest_Docent
Пишу на билдере 6. Нужно мне сделать класс который будет хранить значения некоторых сваойств. Написал как полагается: декларация в h, реализация в cpp. Делаю попытку использовать свой класс из другого модуля, подключая заголовочный файл пишет:
Если объеденить декларацию с реализацией в cpp (как в прикрепленной файле), то все работает как надо.
Подскажите я что-то не так делаю????
текст:
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>:perator [](System::AnsiString)' referenced from C:\PROGRAM FILES\CBUILDER6\PROJECTS\PROPERTYLIST\UNIT1.OBJ
Если объеденить декларацию с реализацией в cpp (как в прикрепленной файле), то все работает как надо.
Подскажите я что-то не так делаю????
текст:
Код:
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------