Russian Qt Forum

Программирование => С/C++ => Тема начата: rdgtest1 от Февраль 12, 2015, 00:43



Название: Инициализация структуры значениями по умолчанию.
Отправлено: rdgtest1 от Февраль 12, 2015, 00:43
Подскажите, что я делаю не так?
Есть код:

struct A
    {
        int x;
        int y;
    };

struct B
    {
        int x=-1;
        int y=-2;
    };

int main(int argc, char *argv[])
    {
        A a={1,2};  // [1]
        B b={1,2};  // [2]

        return 0;
    }

В случае [1] ошибки нет, в случае [2] - ошибка: ошибка: could not convert '{1, 2}' from '<brace-enclosed initializer list>' to 'B'
         B b={1,2};
                 ^


Поддержка С++11 включена.





Название: Re: Инициализация структуры значениями по умолчанию.
Отправлено: torwig от Февраль 12, 2015, 09:50
В 5.3 (GCC 4.8.2) ругается.
В 5.4 (студия 2013) тоже ругается.
Видел на stackoverflow что работает в GCC 5.0, но проверить не могу.


Название: Re: Инициализация структуры значениями по умолчанию.
Отправлено: Igors от Февраль 12, 2015, 11:56
До С++ 11 руки доходят пока редко, но и без него
Код
C++ (Qt)
struct B  {
B() : x(-1), y(-2) {}
};
 
B b = {1, 2};  // ошибка, B имеет конструктор
Просто "так нельзя"


Название: Re: Инициализация структуры значениями по умолчанию.
Отправлено: ViTech от Февраль 12, 2015, 12:23
Гуглите "c++11 initializer list constructor". И ещё "c++ pod initialization" пригодится.


Название: Re: Инициализация структуры значениями по умолчанию.
Отправлено: _Bers от Февраль 12, 2015, 16:33
Подскажите, что я делаю не так?

Инициализация в сишном стиле не работает для классов,  у которых задействованы списки инициализации
(присутствуют явно, либо объявлены конструкторы)