J'ai un cours tel que:
class dialog
{
public:
double dReturnType[][5][3];
};
#include <cstdlib>
#include <iostream>
include <string>
using namespace std;
#include "dialog.h";
int main(int argc, char *argv[])
{
dialog People;
People.dReturnType[0][1] = {1.2,2.3,6.6};
return 0;
}
Il retourne:
[Avertissement] Les listes d'initialisation étendues ne sont disponibles qu'avec -std = c ++ 11 ou -std = gnu11 [activé par défaut] [Erreur]: affectation à un tableau à partir d'une liste d'initialiseurs
Je l'ai un peu cherché en ligne et je n'ai vraiment pas trouvé le moyen de contourner cela. Je préférerais ne pas éditer la classe à l'intérieur de son fichier de classe (un peu contraire à l'objectif). De l'aide?
Remarque: la classe est dans un fichier de projet séparé.
Les listes d'initialiseur ne sont utilisables que pendant l'initialisation.
Si vous voulez utiliser std::initializer_list
après l'initialisation:
auto init = std::initializer_list<double>({1.2,2.3,6.6});
std::copy(init.begin(), init.end(), your_array);
Vous ne pouvez initialiser une liste étendue que si vous êtes sur c ++ 11.
Et si j’étais vous, la bonne habitude est d’utiliser * au lieu de "[]" vide et d’allouer de la mémoire lorsque vous connaissez la taille (avec new ou malloc). d Le type de retour sur votre programme est un pointeur de matices.
Et vous donnez une liste complète à un seul membre du vecteur.
People.dReturnType[0]={1.2,2.3,6.6};
Cela fait plus de sens.
Essayez d'encapsuler et d'utiliser/créer des fonctions d'initialisation qui vous aideront à le faire aussi. C++ mettra tous les 0 au début, mais vous pouvez faire une fonction et appeler:
dialog People("the_atributes_are_here").
C'est une bonne pratique de rendre le dReturnType privé et d'utiliser des fonctions pour accéder à ses données et insérer/modifier des éléments. Mais c'est à vous de décider.