Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 27
1

не мог бы кто нибудь объяснить ошибку с темплейтами

08.03.2016, 00:27. Просмотров 333. Ответов 3
Метки нет (Все метки)


Добрый день, (или вечер)
не мог бы кто нибудь помочь разобраться с ошибкой с темплейтами

в пространстве Warning567 объявлено несколько классов. Меня интересует объект ow567, как я понимаю он наследует свойства и функции класса oddwO_t и класса ow567_t.
Мне необходимо в своем коде реализовать функцию "set" для этого объекта, что бы отлавливать вызовы приведенные ниже и работать с параметрами.
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
namespace Warning567
{
template< uint8_t O >
class oddwO_t : public out_dd_word_t
{
  public:
    oddwO_t( test_mode_fptr f =NULL, uint32_t t =0 ) : out_dd_word_t( O, f, t ) {}
    void set( uint8_t p, uint32_t d =1, uint8_t s =1 )
    {
    }
    void clean( uint8_t p ) { set( p, 0 ); }
};  // class oddwO_t
 
class ow567_t : public out_dd_word_t
{
  public:
    ow567_t( test_mode_fptr =NULL );
  private:
    //uint32_t pack( void );
};  // class ow567_t
}
 
namespace Warning567
{
oddwO_t< 0567 > ow567( is_devise_in_test_mode );
}
 
вызов ".set"
void _idle()
{
   ow567.set(0, 5);
}
ПОПЫТКА реализации
Делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace Warning567
{
oddwO_t< 0567 > ow567;
    
void set( uint8_t p, uint32_t d =1, uint8_t s =1 )
    {
        пока t_set_counter++;
    }   
out_word_t::device_state_t out_word_t::device_state(void) const
    {
        return online;
}
out_dd_word_t::out_dd_word_t(uint8_t a, test_mode_fptr, uint32_t t) {};
out_word_t::out_word_t(unsigned int) {};
word_t::word_t(void) {};
}
1)если пишу "void set( uint8_t p, uint32_t d =1, uint8_t s =1 )" то мингв просто игнорирует вызов этой функции. Это понятно.
2)если пишу "void ow567_t::set( uint8_t p, uint32_t d =1, uint8_t s =1 )" то мингв ругается member function declared in class 'Warning567::ow567_t'. Это вроде бы все понятно, так как "set" наследуется от oddwO_t.
3)если пишу "void oddwO_t::set( uint8_t p, uint32_t d =1, uint8_t s =1 )" то мингв требует темплайт параметры для вызова. Но вот здесь я начинаю плавать, Так как вроде бы я указываю то все верно, что еще надо?


НЕ мог бы кто нибудь объяснить как правильно объявлять функции у подобных объектов? (инклюды и сишники,где это все объявлено, модифицировать не могу)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2016, 00:27
Ответы с готовыми решениями:

Не мог бы кто-нибудь объяснить рекурсию? (не простую как в примерах с факториалом)
Добрый день, вообще я не фанат создавания тем с простыми вопросами, я знаю что такое поиск, но в...

Не мог бы кто-нибудь дать пособия для 1 курса с++
Не мог бы кто-нибудь помочь дать материал по программированию С++ для первого курса.

Кто нибудь может объяснить?
Посмотрите на глю! Кэто как?

Может кто нибудь объяснить асинхронность?
Здравствуйте, как я не пытался понять, что на самом деле происходит при асинхронном вызове, так и...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
3
Don't worry, be happy
16972 / 9853 / 1897
Регистрация: 27.09.2012
Сообщений: 24,431
Записей в блоге: 1
08.03.2016, 00:52 2
Цитата Сообщение от maxfox123 Посмотреть сообщение
НЕ мог бы кто нибудь объяснить как правильно объявлять функции у подобных объектов?
я вот ничего не понял из этого вопроса...

Цитата Сообщение от maxfox123 Посмотреть сообщение
что еще надо?
C++
1
2
3
4
5
template< uint8_t O >
void oddwO_t<O>::set( uint8_t p, uint32_t d, uint8_t s )
{
//...
}
только вот определение уже есть.
0
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 27
08.03.2016, 12:17  [ТС] 3
Это определение в инклюд файле для oddwO_t, который я не могу менять
C++
1
2
3
4
template< uint8_t O >
void oddwO_t<O>::set( uint8_t p, uint32_t d, uint8_t s )
{
}
но мне необходимо реализовать функционал для функции "set" у объекта ow567, который определен как
C++
1
oddwO_t< 0567 > ow567
И вот тут я теряюсь, если бы было
C++
1
2
3
4
5
6
7
8
class ow567_t : public out_dd_word_t
{
  public:
    ow567_t( test_mode_fptr =NULL );
    void set( uint8_t p, uint32_t d, uint8_t s )
  private:
    //uint32_t pack( void );
};  // class ow567_t

Было бы все просто,

C++
1
2
3
4
5
6
7
8
9
namespace Warning567
{
    ow567_t ow567;
    
    void ow567_t:: set( uint8_t p, uint32_t d, uint8_t s )
    {
           //блаблаблабла
    }
}
Но функция "set" наследуется,как я понимаю, от класса oddwO_t
и вот как ее определить и правильно оформить у себя в коде, я не знаю.
Может кто нибудь либо показать как это должно быть оформлено, либо дать ссылку где можно прочитать и понять оформление и декларацию функций наследуемых от другого класса
0
14041 / 7522 / 1781
Регистрация: 30.01.2014
Сообщений: 12,580
08.03.2016, 12:30 4
Цитата Сообщение от maxfox123 Посмотреть сообщение
"set" у объекта ow567
К объекту нельзя прикрепить новую функцию, не в С++.
Можно прикрепить новую функцию к классу (изменить класс). Если класс менять нельзя и объект этот класса уже создан (т.е. нельзя отнаследоваться и определить новый объект этого нового класса), то функции-члены отпадают. Можно сделать свободную функцию, первым параметром принимающим твой объект по ссылке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace Warning567
{
oddwO_t< 0567 > ow567( is_devise_in_test_mode );
 
template< uint8_t O >
void set(oddwO_t<O> & owSelf, uint8_t p, uint32_t d, uint8_t s )
{
    // Бла-бла
}
 
// вызывать так:
set(ow567, /*остальные аргументы*/);
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2016, 12:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

БОМБА это кто нибудь может объяснить?
Взгляните на статичтику http://www.liveinternet.ru/stat/ru/searches.html Гугля обогнал рамблер...

может кто нибудь объяснить что это за цифры
дана программа может кто нибудь объяснить что это за цифры s:5:3 program proga7; uses crt; var...

Кто-нибудь может объяснить как это работает?
Именно создание списка не понятно main :: IO() main = do let fib = 0 : 1 : n &lt;-...

кто нибудь может объяснить, что делает эта функция?
'самая загадочная функция, очевидно binary это файл представленный как набор байтов Function...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.