Здравствуйте Anton V. Kolotaev, Вы писали:
AVK>а разве нельзя записать так: AVK>
AVK>A a = {string("smth"), 3.14};
AVK>
Можно, но при отсутствии конструктора
В msvc правда все равно не получится, а с gcc получится.
При наличии же конструктора (хоть с параметрами хоть без, и неважно как инициализировать члены структуры — хоть в теле конструктора) компилятор будет требовать его.
Ну и наконец когда нибудь можно будет инициализировать вот так
Можно ли инициализировать структуры, члены которых имеют конструктор(ы)?
Типа
struct A{
string s;
double d;
};
A a = {...};
Re: Структуры
От:
Аноним
Дата:
06.05.02 13:07
Оценка:
Здравствуйте Fiend, Вы писали:
F>Можно ли инициализировать структуры, члены которых имеют конструктор(ы)? F>Типа F>struct A{ F> string s; F> double d; F>};
F>A a = {...};
Здравствуйте Fiend, Вы писали:
F>Можно ли инициализировать структуры, члены которых имеют конструктор(ы)? F>Типа F>struct A{ F> string s; F> double d; F>};
F>A a = {...};
Здравствуйте Fiend, Вы писали:
F>Можно ли инициализировать структуры, члены которых имеют конструктор(ы)? F>Типа F>struct A{ F> string s; F> double d; F>};
F>A a = {...};
Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.
В твоем примере 'struct A' — агрегат. Поэтому объекты типа 'struct A' можно инициализировать таким инициализатором.
Здравствуйте Anton V. Kolotaev, Вы писали:
AVK>Здравствуйте Fiend, Вы писали:
F>>Можно ли инициализировать структуры, члены которых имеют конструктор(ы)? F>>Типа F>>struct A{ F>> string s; F>> double d; F>>};
F>>A a = {...};
AVK>а разве нельзя записать так: AVK>
AVK>A a = {string("smth"), 3.14};
AVK>
В данном случае — можно. Если 'string' — это 'std::string', то можно и так:
Здравствуйте Юнусов Булат, Вы писали:
АТ>>В данном случае — можно. Если 'string' — это 'std::string', то можно и так:
АТ>>A a = { "smth", 3.14 };
ЮБ>Должно быть можно, но vc6 ругается
Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.
АТ>В твоем примере 'struct A' — агрегат. Поэтому объекты типа 'struct A' можно инициализировать таким инициализатором.
Простите, а что значит без баз? Без базовых классов?
Здравствуйте Roman Fadeyev, Вы писали:
АТ>>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.
RF>Простите, а что значит без баз? Без базовых классов?
Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.
... и без константных членов (хотя это, наверное, тоже глюк VC++6).
// #import <windows.bas> class IWindows9x:protected DOS { private: virtual HANDLE EnumClouds()=0; };
Здравствуйте KA, Вы писали:
АТ>>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.
KA>... и без константных членов (хотя это, наверное, тоже глюк VC++6).
Глюк VC++6 однозначно. Константные члены в агрегатах разрешаются.