Не могу вынести описание класса в h

Тема в разделе "C и С++ FAQ", создана пользователем Guest_Docent, 15 фев 2005.

Статус темы:
Закрыта.
  1. Guest_Docent

    Guest_Docent Гость

    Репутация:
    0
    Пишу на билдере 6. Нужно мне сделать класс который будет хранить значения некоторых сваойств. Написал как полагается: декларация в h, реализация в cpp. Делаю попытку использовать свой класс из другого модуля, подключая заголовочный файл пишет:

    Если объеденить декларацию с реализацией в 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;
    }
    //---------------------------------------------------------------------------
     
  2. Dr.Gigabit

    Dr.Gigabit Гость

    Репутация:
    0
    С шаблонами так не полагается:) Дело в том, что компилятор не выделяет память сразу, а ждет создания экземпляра шаблона. В этом случае, лучше всего хранить в заголовочных файлах и объявления и определения шаблонов.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей