Vous ne pouvez pas utiliser une initialisation liste pour un struct
après qu'il a été initialisé. Vous avez déjà initialisé par défaut les deux structures Customer
lorsque vous avez déclaré le tableau customerRecords
. Vous allez donc utiliser la syntaxe d'accès aux membres pour définir la valeur des membres de données non statiques, initialiser les structures à l'aide d'une liste de listes d'initialisation lorsque vous déclarez le tableau lui-même ou créer un constructeur pour votre structure et utilisez la fonction membre operator=
par défaut pour initialiser les membres du groupe.
Donc, soit des éléments suivants pourrait fonctionner:
Customer customerRecords[2];
customerRecords[0].uid = 25;
customerRecords[0].name = "Bob Jones";
customerRecords[1].uid = 25;
customerRecords[1].namem = "Jim Smith";
Ou si vous avez défini un constructeur pour votre struct comme:
Customer::Customer(int id, string input_name): uid(id), name(input_name) {}
Vous pouvez ensuite faire:
Customer customerRecords[2];
customerRecords[0] = Customer(25, "Bob Jones");
customerRecords[1] = Customer(26, "Jim Smith");
Ou vous pourriez faire la séquence de listes d'initialisation que Tuomas a utilisé dans sa réponse. La raison pour laquelle sa syntaxe de la liste d'initialisation fonctionne est parce que vous initialisez les structures Customer
au moment de la déclaration du tableau, plutôt que d'autoriser l'initialisation par défaut des structures à chaque fois que vous déclarez une structure de données agrégée comme un tableau.
Votre exemple compile sans erreur sur ideone (gcc-4.5.1) http://www.ideone.com/c9kMr – Praetorian
Ceci est dû à de nouvelles fonctionnalités propres à l'initialisation listes et C++ 0x ... son code ne compile pas sous C++ 03. – Jason