Rumah >pembangunan bahagian belakang >C++ >Mengapa #define NOMINMAX Menyebabkan Ralat Penyusunan dengan std::min dan std::max dalam Pengepala C?
Menyelesaikan Ralat Penyusunan dengan #define NOMINMAX dan std::min/max dalam Pengepala C
Apabila cuba menggunakan makro #define NOMINMAX untuk menghapuskan kekaburan yang diperkenalkan oleh kemasukan Windows.h terhadap makro min dan maksimumnya sendiri, pengguna mungkin menghadapi ralat kompilasi apabila merujuk std::min dan std::max dalam fail berasingan.
Ini berlaku kerana makro NOMINMAX mentakrifkan min dan max sebagai makro, yang diutamakan berbanding versi perpustakaan standard dalam ruang nama global . Akibatnya, dalam fail yang makronya tidak ditakrifkan, pengkompil mentafsir std::min dan std::max sebagai simbol tidak ditentukan.
Untuk menyelesaikan isu ini, terdapat dua pendekatan:
Pilihan 1: Kawal Susunan Definisi Makro
Pastikan bahawa #define Penyata NOMINMAX diletakkan sebelum sebarang pernyataan #include yang mungkin bercanggah dengan makro. Untuk semua fail yang makro tidak ditakrifkan secara eksplisit, ia akan lalai kepada keadaan tidak aktif, membenarkan std::min dan std::max dikenali oleh pengkompil.
Pilihan 2: Fungsi Eksplisit Sintaks Panggil
Sebagai alternatif, seseorang boleh memaksa pengkompil untuk mentafsir std::min dan std::max sebagai fungsi memanggil dan bukannya makro dengan melampirkannya dalam kurungan:
(std::min)(x, y); (std::max)(x, y);
Sintaks ini menghalang pelaksanaan makro seperti fungsi min dan maks daripada digunakan, dengan berkesan menyelesaikan ralat kompilasi.
Atas ialah kandungan terperinci Mengapa #define NOMINMAX Menyebabkan Ralat Penyusunan dengan std::min dan std::max dalam Pengepala C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!