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

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

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

    Guest_Docent Гость

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

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

    Подскажите я что-то не так делаю????

    текст:

    Код (Text):
    //---------------------------------------------------------------------------


    #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 Гость

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

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