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 :
<code class="cpp">struct foo { int x[2]; template <typename... T> 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 }</code>
Si la préservation du statut « const » n'est pas essentielle, vous pouvez également utiliser une fonction pour charger les valeurs du tableau. :
<code class="cpp">struct foo { int x[2]; foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); } };</code>
Cependant, cette approche renonce à la vérification des limites au moment de la compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!