Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не мог бы кто нибудь объяснить ошибку с темплейт, ошибка с темплейтами  
:(
    Опции темы
maxfox111
Дата 8.3.2016, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



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

в пространстве Warning567 объявлено несколько классов. Меня интересует объект ow567, как я понимаю он наследует свойства и функции класса oddwO_t и класса ow567_t.
Мне необходимо в своем коде реализовать функцию "set" для этого объекта, что бы отлавливать вызовы приведенные ниже и работать с параметрами.
Код


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);
}


ПОПЫТКА реализации
Делаю так:
Код


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 )" то мингв требует темплайт параметры для вызова. Но вот здесь я начинаю плавать, Так как вроде бы я указываю то все верно, что еще надо?


НЕ мог бы кто нибудь объяснить как правильно объявлять функции у подобных объектов? (инклюды и сишники,где это все объявлено, модифицировать не могу)

PM MAIL   Вверх
xvr
Дата 9.3.2016, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



В том виде, как у вас это написанно вы никак set не переопределите. Он не виртуальный и с телом, т.ч. перегрузить его не получится.

Определение тела функции set вне класса будет выглядить так -
Код

namespace Warning567
{
  template< uint8_t O > void oddwO_t<O>::set(uint8_t p, uint32_t d, uint8_t s)
   {
     ...
   }
}

Максимум можно попытаться сделать частичную специализацию на конкретное значение O (например 42):
Код

namespace Warning567
{
  template<> void oddwO_t<42>::set(uint8_t p, uint32_t d, uint8_t s)
   {
     ...
   }
}
И то не уверен - разрешена ли частичная специализация class members  smile 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.