Указатели на функции
От: WerWoolf  
Дата: 26.04.12 23:44
Оценка:
Здравствуйте, помогите разобраться с неработающим кодом.

/*
--------------------------------------------------------------------------------
  File: Menu.h
  Created by: Andrew Oleshkewich.
--------------------------------------------------------------------------------
*/
namespace LibraryTerminal
{

  template< typename TItemType >
  class Menu
  {
    typedef bool (TItemType::*funptr_t)();

    std::vector<funptr_t> m_MenuFunct;
    std::vector<char>    m_MenuIndex;
    Keyboard&        m_Keyboard;
  public:
    Menu(Keyboard& InKeyboard);

    void RegisterFunction(funptr_t InFun, char InIndex);
    void Run();
  }; // class Keyboard

  /*
  ----------------------------------------------------------------------------
    class Menu.
  ----------------------------------------------------------------------------
  */
  template< typename TItemType >
  Menu<TItemType>::Menu(Keyboard& InKeyboard)
    : m_Keyboard(InKeyboard)
  {}

  template< typename TItemType >
  void Menu<TItemType>::RegisterFunction(funptr_t InFun, char InIndex)
  {
    m_MenuFunct.push_back(InFun);
    m_MenuIndex.push_back(InIndex);
  }

  template< typename TItemType >
  void Menu<TItemType>::Run()
  {
    int Ch = m_Keyboard.GetChar();

    for(size_t Index = 0; Index < m_MenuFunct.size(); ++Index)
    {
      if(Ch == m_MenuIndex[Index])
      {
        funptr_t fun = m_MenuFunct[Index];

// !!!!!!!!!!!!!!!!!!!!    fun();
      }
    }
  }

} // namespace LibraryTerminal





В выделеной строчке компилятор ругается:


1>c:\users\andrew\documents\visual studio 2010\projects\library\terminal\inc\menu.h(53): error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов 
1>          c:\users\andrew\documents\visual studio 2010\projects\library\terminal\inc\menu.h(44): при компиляции функции-члена "void LibraryTerminal::Menu<TItemType>::Run(void)" класса шаблон 
1>          with 
1>          [ 
1>              TItemType=LibraryTerminal::Terminal 
1>          ]


Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.