En C 0x, vous pouvez rencontrer l'erreur « types incompatibles dans l'affectation » lorsque vous tentez d'initialiser un tableau de membres avec une liste d'initialisation .
Pour résoudre ce problème, envisagez plutôt d'utiliser un constructeur de modèle variadique :
struct foo {
int x[2];
template
foo(T... ts) : x{ts...} {}
};
int main() {
// Usage
foo f1(1, 2); // OK
foo f2{1, 2}; // Also OK
foo f3(42); // OK; x[1] zero-initialized
foo f4(1, 2, 3); // Error: too many initializers
foo f5(3.14); // Error: narrowing conversion not allowed
foo f6("foo"); // Error: no conversion from const char* to int
}
Si conserver le statut 'const' n'est pas essentiel, vous pouvez également utiliser une fonction pour charger les valeurs du tableau :
struct foo {
int x[2];
foo(std::initializer_list il) {
std::copy(il.begin(), il.end(), x);
}
};
Cependant, cette approche renonce à la vérification des limites au moment de la compilation.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3