Salut,
moi non plus je ne m'y connais pas trop dans le nouveau standard.
Apparemment, quand on utilise une initializer-list qui ne correspond à aucun constructeur défini avec, cela revient à faire:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| struct empty_class
{
};
struct test: public empty_class
{
int i;
int j;
};
int main(int argc, char **argv)
{
test t = {0, 1};
return 0;
} |
avec le "=", à la mode C.
D'ailleurs, si on rajoute le "=", le compilateur est assez explicite:
error: `t' must be initialized by constructor, not by `{...}'
Dans ton cas, ce n'est pas gênant d'utiliser une liste d'initialisation (empty-class ne possède pas d'éléments), mais en général, si:
Les éléments d'une classe de base doivent être initialisés indépendamment de ceux de la classe dérivée (il peut y avoir un constructeur propre à la classe de base etc.), c'est sûrement ce qui cause ton erreur.
Voilà, je te donne ma propre interprétation, le C++ interdisant déjà le = {...} sur des classes dérivées, il interdit maintenant aussi le {...}
Partager