Kekeliruan Saiz Tatasusunan Menyebabkan Ralat
Apabila mengisytiharkan tatasusunan apungan dengan saiz dinamik, seperti:
<code class="cpp">int size = 100; float x[size][2];</code>
anda mungkin menghadapi ralat "ekspresi malar dijangka". Ini berlaku kerana C memerlukan tatasusunan mempunyai saiz tetap pada masa penyusunan, tidak ditentukan semasa masa jalan. Pembolehubah saiz di sini tidak boleh digunakan sebagai dimensi tatasusunan yang sah.
Penyelesaian dengan Vektor
Untuk mengelakkan isu ini, pertimbangkan untuk menggunakan vektor:
<code class="cpp">std::vector<std::array<float, 2>> x(size);</code>
Ini mencipta vektor tatasusunan, setiap tatasusunan mengandungi dua apungan.
Penyelesaian Alternatif
Sebagai alternatif, anda boleh menggunakan peruntukan memori mentah dengan baharu atau cipta sendiri jenis tatasusunan:
<code class="cpp">// With new float (*px)[2] = new float[size][2]; // With custom array type template<typename T, size_t N> struct array { T data[N]; }; array<float, 2> myArray[size];</code>
Pilihan Tambahan
Pilihan lain termasuk menggunakan vektor pasangan atau melancarkan jenis tatasusunan anda sendiri dengan pembantu sintaks:
<code class="cpp">// Vector of pairs std::vector<std::pair<float, float>> x(size); // Custom array type template<typename T> struct identity { typedef T type; }; using FloatArray2 = identity<float[2]>::type; FloatArray2 myArray[size];</code>
Atas ialah kandungan terperinci Mengapakah Mengisytiharkan Tatasusunan Terapung dengan Saiz Dinamik Menghasilkan Ralat \'Ungkapan Malar Yang Dijangka\' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!