1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем 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
    С шаблонами так не полагается:) Дело в том, что компилятор не выделяет память сразу, а ждет создания экземпляра шаблона. В этом случае, лучше всего хранить в заголовочных файлах и объявления и определения шаблонов.
     
Загрузка...
Похожие Темы - Не могу вынести
  1. Tayrus
    Ответов:
    6
    Просмотров:
    93
  2. Djon253
    Ответов:
    6
    Просмотров:
    145
  3. Mister robot
    Ответов:
    15
    Просмотров:
    218
  4. Lustrator
    Ответов:
    21
    Просмотров:
    217
  5. marraty
    Ответов:
    56
    Просмотров:
    851
Статус темы:
Закрыта.

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