Re[3]: Про перегрузку конструкторов
От: MasterZiv СССР  
Дата: 10.11.09 08:06
Оценка:
CEMb wrote:

> M>A::A() { ... }

>
> M>A::A(int i) : A() { i_ = i; }
>
> M>A::A(char c) : A() { c_ = c; }
> M>
>
>
>
> На это оно ругается
>
> error C2614: 'A' : illegal member initialization: 'A' is not a base
> or member

Это, наверное, была шутка. Это вам не Java.


Чтобы сделать такое, тебе нужно сделать отдельную функцию
инициализации, вероятно, приватную, и вызывать
её из каждого конструктора. При этом делать инициализацию
в списке инициализациии не получится.
Если нужно делать инициализацию в списке инициализации,
то придётся написать N функций, для каждого member-а.
Каждая функция должна быть статической и не присваивать в
теле мемберу что-то, а возвращать это что-то в виде значения:

class A
{
....
private:
static int initValFor_i(int i)
{
return i + 10;
}
};

A::A(int i) :
i_(initValFor_i(i))
{}
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.