Форум программистов, компьютерный форум CyberForum.ru

Как создать экземпляр этого класса? - C++

Восстановить пароль Регистрация
 
Max_92
 Аватар для Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
15.09.2013, 12:52     Как создать экземпляр этого класса? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#pragma once
 
template<typename T>
class fgFSM
{
public:
  fgFSM() : _time_in_cur_state(0.0f), _cur_state(-1)
  {
  }
 
  virtual void BeginState( T state ) {}
  virtual void UpdateState( T state ) {}
  virtual void EndState( T state ) {}
 
  void SetState( T state )
  {
    EndState( (T)_cur_state );
    _cur_state = state;
    _time_in_cur_state = 0.0f;
    BeginState( (T)_cur_state );
  }
 
  void UpdateFSM( float delta_time )
  {
    if( _cur_state != -1 )
    {
      _time_in_cur_state+=delta_time;
      UpdateState( (T)_cur_state );
    }
  }
 
  float GetTimeInCurState() { return _time_in_cur_state; }
  T GetState() { return (T)_cur_state; }
 
private:
  float _time_in_cur_state;
  int _cur_state;
};
 
enum EState
{
  STT_OFF = -1, // optional, -1 is the initial state of the fsm
  STT_WALK,
  STT_RUN,
  STT_STOP,
  STT_EAT
};
 
class ObjectUsingFSM: public fgFSM<EState>
{
public:
  // ...
  void UpdateState( EState t );
  void BeginState( EState t );
  void EndState( EState t );
  // ...
};

Как правильно в этом случае создать объект класса ObjectUsingFSM и правильно юзать перечислимый тип?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 12:52     Как создать экземпляр этого класса?
Посмотрите здесь:

C++ Невозможно создать экземпляр абстрактного класса. :)
как исправить Ошибка 8 error C2259: Tabl: невозможно создать экземпляр абстрактного класса C++
C++ Можно ли получить ссылку на экземпляр класса по полю этого экземпляра
немогу создать экземпляр абстрактного класса C++
C++ Как построить экземпляр дочернего класса на основе готового экземпляра базового класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
15.09.2013, 13:44     Как создать экземпляр этого класса? #2
Так?
C++
1
2
ObjectUsingFSM obj;
obj.UpdateState(STT_OFF);
Max_92
 Аватар для Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
15.09.2013, 13:44  [ТС]     Как создать экземпляр этого класса? #3
ViktorKozlov, нет, вываливает ошибки
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
15.09.2013, 13:47     Как создать экземпляр этого класса? #4
Какие?
Max_92
 Аватар для Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
15.09.2013, 13:57  [ТС]     Как создать экземпляр этого класса? #5
ViktorKozlov, для начала признаюсь, в этой среде программировать не умею. Я создал проект Windows Forms с именем FSM. Куда мне всю вот эту кучу закинуть? В какой файл? Где создавать объекты? Если вставить вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const int num = 5;
 
enum EState
{
  STT_OFF = -1, // optional, -1 is the initial state of the fsm
  STT_WALK,
  STT_RUN,
  STT_STOP,
  STT_EAT
} bot[num];
 
 
class fgFSM
{
public:
  fgFSM() : _time_in_cur_state(0.0f), _cur_state(-1)
  {
  }
 
  virtual void BeginState( EState state ) {}
  virtual void UpdateState( EState state ) {}
  virtual void EndState( EState state ) {}
 
  void SetState( EState state )
  {
    EndState( (EState)_cur_state );
    _cur_state = state;
    _time_in_cur_state = 0.0f;
    BeginState( (EState)_cur_state );
  }
 
  void UpdateFSM( float delta_time )
  {
    if( _cur_state != -1 )
    {
      _time_in_cur_state+=delta_time;
      UpdateState( (EState)_cur_state );
    }
  }
 
  float GetTimeInCurState() { return _time_in_cur_state; }
  EState GetState() { return (EState)_cur_state; }
 
private:
  float _time_in_cur_state;
  int _cur_state;
};
 
 
 
 
class ObjectUsingFSM: public fgFSM
{
public:
  // ...
  void UpdateState( EState t );
  void BeginState( EState t );
  void EndState( EState t );
  // ...
};
в FSM.cpp после "using namespace FSM;", то как минимум в появляющихся обработчиках событий в Form1.h все эти классы и прочее будут не видны.

А ошибка в "ObjectUsingFSM obj1;" такая:
Миниатюры
Как создать экземпляр этого класса?  
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
15.09.2013, 14:10     Как создать экземпляр этого класса? #6
Max_92, у вас
C++
1
2
3
  void UpdateState( EState t );
  void BeginState( EState t );
  void EndState( EState t );
определены?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 14:16     Как создать экземпляр этого класса?
Еще ссылки по теме:

Как сделать членом класса экземпляр этого же класса C++
Создание статической функции класса, которая принимает экземпляр этого же класса как объект C++
C++ Создать объект внутри класса, который может вызывать функцию этого класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Max_92
 Аватар для Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
15.09.2013, 14:16  [ТС]     Как создать экземпляр этого класса? #7
ViktorKozlov, нет. после определения заработало.

Добавлено через 4 минуты
почему обработчики добавляются в Form1.h и код надо писать там ? верх тупости по-моему. всё то, что объявлено в FSM.cpp, - недоступно. Как правильно-то?
Yandex
Объявления
15.09.2013, 14:16     Как создать экземпляр этого класса?
Ответ Создать тему
Опции темы

Текущее время: 17:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru