Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: C++ -массив произвольного размера без new
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
WHALE
Пытаюсь через шаблон:
Код
****************************************************************************/
           template <typename  T, const unsigned char buffer_size>
  class TBASE_UART: public TBASE_SERIAL_INTERFASE
  public:
              TBASE_UART (const unsigned char N_uart,  
                         const unsigned char tx_rx_yart,
                         const unsigned char mode_uart=0x86,  
                         const unsigned char baud_rate_uart=0x33 ):
                         TBASE_SERIAL_INTERFASE(buffer_size)  
.....
private:
   T data_read_buffer[buffer_size];

Пытаюсь инстанцировать
  TBASE_UART <unsigned char, 20> uart0  (0, 0X98);

Получаю Error[Pe028]: expression must have a constant value .
IAR AVR 6.3

Я не прав и так нельзя в принципе или это как-то лечится?
neiver
С шаблоном и массивом всё вроде впорядке (может только const в "const unsigned char buffer_size" лишний). Должно работать. Может проблема чем-то в другом.
WHALE
Цитата(neiver @ Nov 1 2011, 18:25) *
С шаблоном и массивом всё вроде в порядке (может только const в "const unsigned char buffer_size" лишний). Должно работать. Может проблема чем-то в другом.

const это я уже с горя. Спасибо за сообщение,что так действовать можно.
Буду думать дальше...
AHTOXA
Нужно только учесть, что с таким путём (шаблонами) размер массива задаётся на этапе компиляции. То есть, это практически то же, что и
Код
#define BUFFER_SIZE 32
char buffer[BUFFER_SIZE];
WHALE
Цитата(AHTOXA @ Nov 2 2011, 00:14) *
Нужно только учесть, что с таким путём (шаблонами) размер массива задаётся на этапе компиляции. То есть, это практически то же, что и
Код
#define BUFFER_SIZE 32
char buffer[BUFFER_SIZE];

Ну дык так и задумывалось.Иначе new,которое на AVR совсем не кошерно будет.
sergeeff
Ну если все причесать

Код
template <typename  T, const unsigned char buffer_size>
class TBASE_UART
{
public:
    TBASE_UART (const unsigned char N_uart,  
        const unsigned char tx_rx_yart,
        const unsigned char mode_uart=0x86,  
        const unsigned char baud_rate_uart=0x33 ) {
        m_uart = N_uart;
        m_tx_rx_yart = tx_rx_yart;
    };

private:
    T data_read_buffer[buffer_size];
    unsigned char m_uart;
    unsigned char m_tx_rx_yart;
};


то работает.

P.S. Да, не плохо бы поправить на INTERFACE.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.