Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > шаблон локального класса


Автор: AlterMann 15.12.2006, 18:41
Приветсвую товарищей гуру smile 

Делаю шаблон класса:
Код

template <class T> class MyClass
{
  public:
   MyClass(); // бла бла бла... в общем не важно какой конструктор... или важно??
   void AddItem(char *,void (*)(T));
   void ShowAll();

  private:
   struct MyClassItem
   {
     char Name[20];
     void (*Func)(T);
   };
   MyClassItem Items[10];
   int Nums;
};

template <class T> MyClass <T>::MyClass() {...} // сам конструктор... тут Nums = 0;
template <class T> MyClass <T>::AddItem(char *name,void (*func)(T))
{
  strcpy(Items[Nums].Name,name);
  Items[Nums].Func = func;
  Nums++;
}
template <class T> MyClass <T>::ShowAll()
{
  // ... бла бла бла
  Items[4].Func(T);
  // ... бла бла бла
}

В общем примерно так...

Так вот, когда пытаюсь откомпилить (Turbo C++ IDE) - пишет что ошибка в синтаксисе определения шаблона... ):
Подскажите пожалуйста, где я не прав? (:

Автор: JackYF 15.12.2006, 18:50
Поставь в определения шаблонов (строки 18,19) тип возвращаемого значения - void.

Автор: AlterMann 15.12.2006, 23:40
прошу прощения...
когда своё сообщение писал забыл туда написать (грубая ошибка, но я только сегодня начал пробовать юзать темплейты...)
в общем, добавляю void (строки 19 и 25 (строка 18 - конструктор, там нет возвращаемого значения))

в итоге код выглядит так:
Код

template <class T> class MyClass
{
  public:
   MyClass(); // бла бла бла... в общем не важно какой конструктор... или важно??
   void AddItem(char *,void (*)(T));
   void ShowAll();
  private:
   struct MyClassItem
   {
     char Name[20];
     void (*Func)(T);
   };
   MyClassItem Items[10];
   int Nums;
};
template <class T> MyClass <T>::MyClass() {...} // сам конструктор... тут Nums = 0;
template <class T> void MyClass <T>::AddItem(char *name,void (*func)(T))
{
  strcpy(Items[Nums].Name,name);
  Items[Nums].Func = func;
  Nums++;
}
template <class T> void MyClass <T>::ShowAll()
{
  // ... бла бла бла
  Items[4].Func(T);
  // ... бла бла бла
}

и всё равно пишет, что ошибка синаксиса (Declaration syntax error) и указывает на 2 строки: на 1 и 16...

Автор: Daevaorn 15.12.2006, 23:58
Цитата(AlterMann @  16.12.2006,  00:40 Найти цитируемый пост)
Items[4].Func(T);

что за Т?
Цитата(AlterMann @  16.12.2006,  00:40 Найти цитируемый пост)
и всё равно пишет, что ошибка синаксиса (Declaration syntax error)

Ответ:
Цитата(AlterMann @  15.12.2006,  19:41 Найти цитируемый пост)
(Turbo C++ IDE)


Автор: AlterMann 16.12.2006, 16:55
Цитата
что за Т?

Т - как параметр функции... тот тип, который может изменяться... ну шаблон ради этого изменяемого типа параметра функции и делаю...
Цитата
(Turbo C++ IDE)

а чо, не получится в нём сделать?.. простые шаблоны (ну как пример - вектор) - норм компилятся...

Автор: JackYF 18.12.2006, 14:38
AlterMann, у меня код с void'ами компилился на GCC. Так что тут дело, наверное, в Turbo C++ - компиляторе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)