Bagaimana untuk menyelesaikan ralat sintaks C++: 'ungkapan utama yang dijangkakan sebelum ':' token'?

PHPz
Lepaskan: 2023-08-26 16:06:22
asal
6901 orang telah melayarinya

如何解决C++语法错误:'expected primary-expression before ':' token'?

Bagaimana untuk menyelesaikan ralat sintaks C++: 'ungkapan utama yang dijangkakan sebelum token ':'?

Dalam pengaturcaraan C++, ralat sintaks adalah masalah biasa. Salah satu ralat biasa ialah mesej ralat "ungkapan utama yang dijangka sebelum token ':'". Ralat ini biasanya berlaku apabila menggunakan ungkapan bersyarat dan pengendali ternary. Artikel ini akan memperkenalkan punca ralat ini dan memberikan penyelesaian yang sepadan.

Mula-mula, mari lihat contoh kod ringkas:

int main() {
    int x = 5;
    int y = 10;
    int max = (x > y) ? x : y;
    return 0;
}
Salin selepas log masuk

Dalam kod di atas, kami cuba menggunakan ungkapan bersyarat dan pengendali ternary untuk membandingkan saiz x dan y, dan menetapkan nilai yang lebih besar kepada pembolehubah maks. Walau bagaimanapun, pengkompil melaporkan ralat "ungkapan utama yang dijangkakan sebelum token ':'". Ini kerana dalam sintaks C++, "?" dan ":" dalam operator ternary mesti digantikan dengan ungkapan. Apabila ungkapan selepas tanda soal adalah benar, ungkapan selepas titik bertindih akan dilaksanakan jika tidak, ungkapan sebelum titik bertindih akan dilaksanakan.

Untuk menyelesaikan ralat ini, kami perlu memastikan bahawa ungkapan bersyarat yang digunakan dalam operator ternary adalah ungkapan undang-undang. Sebab biasa ralat ini termasuk yang berikut:

  1. Ungkapan hilang atau salah: Apabila menggunakan operator ternary, anda perlu memastikan bahawa ungkapan dalam bahagian bersyarat ialah ungkapan yang betul. Jika ungkapan bersyarat hilang atau salah, pengkompil tidak akan mengenalinya, mengakibatkan ralat "ungkapan utama yang dijangkakan sebelum token ':'". Contohnya, ungkapan bersyarat tiada dalam kod berikut, yang membawa kepada ralat ini:
int main() {
    int x = 5;
    int y = 10;
    int max = (x >) ? x : y; // 错误:条件表达式缺失
    return 0;
}
Salin selepas log masuk
  1. Kurungan tiada: Kadangkala, kita mungkin mengabaikan kurungan ungkapan bersyarat dalam operator ternary, yang juga membawa kepada ralat yang sama . Apabila menggunakan operator ternary, pastikan anda menggunakan kurungan dalam ungkapan bersyarat untuk mengelakkan ralat sintaks. Berikut ialah contoh kurungan yang hilang:
int main() {
    int x = 5;
    int y = 10;
    int max = x > y ? x : y; // 错误:缺少条件表达式的括号
    return 0;
}
Salin selepas log masuk

Untuk membetulkan ralat dalam dua kes di atas, kita hanya perlu menggunakan ungkapan undang-undang dalam kedudukan ungkapan bersyarat dan pastikan anda menggunakan sintaks yang betul.

Selain itu, apabila kami menggunakan pengendali ternary, kami juga perlu memastikan bahawa kami menggunakan sintaks yang betul dalam konteks sintaksnya. Sebagai contoh, dalam kod berikut, kami cuba memberikan hasil operator ternary kepada ungkapan yang menyalahi undang-undang, mengakibatkan ralat:

int main() {
    int x = 5;
    int y = 10;
    (x > y) ? x : y = max; // 错误:赋值给非法的表达式
    return 0;
}
Salin selepas log masuk

Untuk menyelesaikan ralat ini, kami perlu memastikan bahawa apabila menggunakan operator ternary, hasil Assign kepada ungkapan undang-undang, seperti pembolehubah.

Ringkasnya, apabila ralat sintaks C++ "ungkapan utama yang dijangkakan sebelum token ':'" berlaku, kita harus menyemak aspek berikut:

  1. Pastikan ungkapan bersyarat dalam operator ternary ialah formula ungkapan undang-undang dan gunakan sintaks yang betul dalam konteks tatabahasanya.
  2. Pastikan anda menggunakan kurungan yang betul untuk mengehadkan ungkapan bersyarat.
  3. Pastikan keputusan dalam operator ternary diberikan kepada ungkapan undang-undang.

Dengan memberi perhatian kepada butiran ini, kami boleh mengelakkan ralat sintaks C++ biasa ini dan menjadikan kod kami lebih stabil dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat sintaks C++: 'ungkapan utama yang dijangkakan sebelum ':' token'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan