Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membetulkan Ralat \"Expected Constant Expression\" Apabila Mengisytiharkan Tatasusunan dalam C ?

Bagaimana untuk Membetulkan Ralat \"Expected Constant Expression\" Apabila Mengisytiharkan Tatasusunan dalam C ?

Linda Hamilton
Linda Hamiltonasal
2024-10-25 13:04:03544semak imbas

How to Fix the

Menyelesaikan Ralat "Ungkapan Malar Jangkaan" untuk Saiz Tatasusunan

Pertimbangkan kod C berikut:

<code class="cpp">int count = 0;
float sum = 0;
float maximum = -1000000;

std::ifstream points;

int size = 100;
float x[size][2]; // <<< Error

Ini kod menimbulkan ralat "ekspresi malar dijangka" apabila mengisytiharkan tatasusunan x. Ralat ini berlaku kerana C memerlukan saiz tatasusunan bukan statik untuk diketahui pada masa penyusunan.

Penyelesaian Menggunakan Vektor

Untuk menyelesaikan isu ini, kita boleh menggunakan vektor C bukannya tatasusunan:

<code class="cpp">std::vector<std::array<float, 2>> x(size);</code>

Penyelesaian Menggunakan baharu

Pendekatan lain melibatkan memperuntukkan tatasusunan secara dinamik menggunakan operator baharu:

<code class="cpp">float (*px)[2] = new float[size][2];</code>

Penyelesaian Alternatif

  • Gunakan Boost: Jika anda mempunyai akses kepada perpustakaan Boost, anda boleh menggunakan boost::array dan bukannya std::array.
  • Tentukan Jenis Tatasusunan Tersuai: Tentukan jenis tatasusunan tersuai yang menyokong saiz dinamik dan gunakannya dalam vektor.

Pertimbangan untuk Pengkompil Bukan C 11

Jika anda tidak mempunyai sokongan C 11, gunakan teknik berikut:

  • Gunakan templat identiti untuk memudahkan sintaks apabila menggunakan baharu.
  • Gunakan vektor std::pair sebagai alternatif kepada penyelesaian vektor yang dinyatakan sebelum ini.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \"Expected Constant Expression\" Apabila Mengisytiharkan Tatasusunan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn