Re[2]: Структуры
От: Юнусов Булат Россия  
Дата: 06.05.02 14:17
Оценка: 3 (1)
Здравствуйте Anton V. Kolotaev, Вы писали:

AVK>а разве нельзя записать так:

AVK>
AVK>A a = {string("smth"), 3.14};
AVK>


Можно, но при отсутствии конструктора
В msvc правда все равно не получится, а с gcc получится.

При наличии же конструктора (хоть с параметрами хоть без, и неважно как инициализировать члены структуры — хоть в теле конструктора) компилятор будет требовать его.

Ну и наконец когда нибудь можно будет инициализировать вот так
Структуры
От: Fiend  
Дата: 06.05.02 12:40
Оценка:
Можно ли инициализировать структуры, члены которых имеют конструктор(ы)?
Типа
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 = {...};


Используй конструктор:
struct A{
  string s;
  double d;

  A(string _s, double _d): s(_s), d(_d){}
};

A a(...);
Re: Структуры
От: Anton V. Kolotaev  
Дата: 06.05.02 13:26
Оценка:
Здравствуйте Fiend, Вы писали:

F>Можно ли инициализировать структуры, члены которых имеют конструктор(ы)?

F>Типа
F>struct A{
F> string s;
F> double d;
F>};

F>A a = {...};


а разве нельзя записать так:
A a = {string("smth"), 3.14};
Re: Структуры
От: Андрей Тарасевич Беларусь  
Дата: 06.05.02 15:38
Оценка:
Здравствуйте Fiend, Вы писали:

F>Можно ли инициализировать структуры, члены которых имеют конструктор(ы)?

F>Типа
F>struct A{
F> string s;
F> double d;
F>};

F>A a = {...};


Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.

В твоем примере 'struct A' — агрегат. Поэтому объекты типа 'struct A' можно инициализировать таким инициализатором.
Best regards,
Андрей Тарасевич
Re[2]: Структуры
От: Андрей Тарасевич Беларусь  
Дата: 06.05.02 15:41
Оценка:
Здравствуйте 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', то можно и так:

A a = { "smth", 3.14 };
Best regards,
Андрей Тарасевич
Re[3]: Структуры
От: Юнусов Булат Россия  
Дата: 06.05.02 17:21
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>В данном случае — можно. Если 'string' — это 'std::string', то можно и так:


АТ>A a = { "smth", 3.14 };


Должно быть можно, но vc6 ругается
Re[4]: Структуры
От: Андрей Тарасевич Беларусь  
Дата: 06.05.02 18:06
Оценка:
Здравствуйте Юнусов Булат, Вы писали:

АТ>>В данном случае — можно. Если 'string' — это 'std::string', то можно и так:


АТ>>A a = { "smth", 3.14 };


ЮБ>Должно быть можно, но vc6 ругается


Совершенно возмутительный глюк VC6.
Best regards,
Андрей Тарасевич
Re[2]: Структуры
От: Roman Fadeyev  
Дата: 07.05.02 04:45
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.


АТ>В твоем примере 'struct A' — агрегат. Поэтому объекты типа 'struct A' можно инициализировать таким инициализатором.


Простите, а что значит без баз? Без базовых классов?
Re[3]: Структуры
От: Андрей Тарасевич Беларусь  
Дата: 07.05.02 05:48
Оценка:
Здравствуйте Roman Fadeyev, Вы писали:

АТ>>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.


RF>Простите, а что значит без баз? Без базовых классов?


Да. Без базовых классов.
Best regards,
Андрей Тарасевич
Re[2]: Структуры
От: KA it-knowledge-base.blogspot.com
Дата: 08.05.02 14:03
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.


... и без константных членов (хотя это, наверное, тоже глюк VC++6).
//
#import <windows.bas>
class IWindows9x:protected DOS { private: virtual HANDLE EnumClouds()=0; };
Re[3]: Структуры
От: Андрей Тарасевич Беларусь  
Дата: 08.05.02 16:03
Оценка:
Здравствуйте KA, Вы писали:

АТ>>Инициализировать можно по-разному. Списком инициализаторов в скобках '{...}' можно инициализировать только агрегаты. Агрегат — это либо массив, либо класс без явно определенных конструкторов, без баз, без виртуальных функций и без нестатических полей в private и protected областях.


KA>... и без константных членов (хотя это, наверное, тоже глюк VC++6).


Глюк VC++6 однозначно. Константные члены в агрегатах разрешаются.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.