реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> IAR AVR и инициализация массива объектов
alexp74
сообщение Dec 17 2015, 19:56
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



Добрый день.

Возникла необходимость перенести проект для AVR с AtmelStudio (GCC) на IAR AVR.
Столкнулся с такой проблемой. Нужно инициализировать массив объектов с константным членом внутри. Вроде как правильно это делать в списке инициализации. В GCC нет проблем. Правда студия предупреждает "extended initializer lists only available with -std=c++11 or -std=gnu++11". А как можно в IAR? Кто сталкивался?

Пример кода для AtmelStudio:

Код
class A
{
    private:
    char * const portx;
    
    public:
    A() : portx(0) {};
    A(char * const port) : portx(port) {};
};

class B
{
    private:
    A m_b[2];
    
    public:
    B();
};

char port;
char * const pport = &port;

B::B() : m_b { A(pport), A(pport) }
{
}

int main()
{
    B b();

    return 0;
}
Go to the top of the page
 
+Quote Post
VladimirZ
сообщение Dec 17 2015, 21:58
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 8-02-05
Из: Харьков
Пользователь №: 2 496



У Вас константный указатель и его необходимо инициализировать. IAR не виноват.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 18 2015, 05:14
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Код
class A
{
    private:
    char * portx;
...
};

B::B() :
{
  m_b[0] = A(pport);
  m_b[1] = A(pport);
}


Например так. Или взять ИАР посовременней, с поддержкой стандарта C++11
Go to the top of the page
 
+Quote Post
shreck
сообщение Dec 18 2015, 06:01
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(Непомнящий Евгений @ Dec 18 2015, 11:14) *
Например так. Или взять ИАР посовременней, с поддержкой стандарта C++11

А такой есть?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 18 2015, 06:20
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(shreck @ Dec 18 2015, 09:01) *
А такой есть?


хз, я на авр-ках сижу на древнем 5.13с, на более новый денег жаль sm.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 18 2015, 07:18
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alexp74 @ Dec 17 2015, 22:56) *
А как можно в IAR? Кто сталкивался?
А никак. Предыдущий Стандарт допускал при инициализации массива в списке инциализации класса только вызов конструкторов без параметров. Или обходными путями, как Евгений предложил.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alexp74
сообщение Dec 18 2015, 19:31
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



Цитата(Сергей Борщ @ Dec 18 2015, 09:18) *
А никак. Предыдущий Стандарт допускал при инициализации массива в списке инциализации класса только вызов конструкторов без параметров. Или обходными путями, как Евгений предложил.

Да, согласен. Проще убрать const. Спасибо.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016