На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> template's

    воть.
    понадобились темплейты.
    и сpазy косяк.

    пpимеp взят из мсдн.

    ************* h **************************
    template <class T, int i> class TempClass
    {
    public:
    TempClass( void );
    ~TempClass( void );
    int MemberSet( T a, int b );
    private:
    T Tarray[i];
    int arraysize;
    };
    *********************************************
    ************** cpp **************************
    template <class T, int i>
    TempClass< T, i >::TempClass( void )
    {
    TRACE( "TempClass created.\n" );
    }

    template <class T, int i>
    TempClass< T, i >::~TempClass( void )
    {
    TRACE( "TempClass destroyed.\n" );
    }


    template <class T, int i>
    int TempClass< T, i >::MemberSet( T a, int b )
    {
    if( ( b >= 0 ) && (b < i) )
    {
    Tarray[b++] = a;
    return sizeof( a );
    }
    else
    return -1;
    }
    *********************************************

    все компилится ок.
    но пpи попытке обьявления экземпляpа, напpимеp TempClass<int, 2> aaa;
    линкеp еppоp на констpyктоpе и дестpyктоpе. не может он их найти.

    error lnk2001: unresolved external symbol "public: __thiscall и т.д."

    подобная хpень замечена также на пpодyктах боланда.

    в чем пpикол. ведь синстаксически, как я понимаю. все пpавильно.

      А компилятор какой ?
      Под борландскими bcc32 5.01 и bcc32 5.5 и
      гнутым gcc 2.96.2 всё ок компилится и работает.
      Как определяется TRACE ?
        сколько же народу косят эти template'ты biggrin.gif

        ПИШИ ВСЕ В .h и будет тебе счастье
          да, есть такое неудобство.. и по моему это не только в VC, а еще очень много где.
          писать не только функции, но и их тела в .h - бр.. это изващение, но по другому что то по моему никак. и по моему это связанно с тем что к .cpp может быть подключено несколько .h файлов.
            потому что шаблон это не тело функции

            CODE
            template <class T, int i>
            TempClass< T, i >::TempClass( void )
            {
            TRACE( "TempClass created.\n" );
            }


            это не тело

            CODE
            TempClass< int>::TempClass( void )
            {
            TRACE( "TempClass created.\n" );
            }

            вот это - тело cool.gif и пиши его в спп
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0420 ]   [ 15 queries used ]   [ Generated: 15.05.24, 04:34 GMT ]