"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا أحصل على أخطاء عند استخدام std::min/max مع #define NOMINMAX؟

لماذا أحصل على أخطاء عند استخدام std::min/max مع #define NOMINMAX؟

تم النشر بتاريخ 2024-12-22
تصفح:990

Why Do I Get Errors When Using std::min/max with #define NOMINMAX?

استخدام std::min/max مع #define NOMINMAX

في التحديث الأخير لملف main.cpp، قمت بتقديم توجيه المعالج المسبق التالي:

#define NOMINMAX
#include 
#include 

يسمح لك هذا الإجراء باستخدام وظائف std::max وstd::min داخل التعليمات البرمجية الخاصة بك. ومع ذلك، فإن المحاولات اللاحقة لاستخدام هذه الوظائف في ملفات أخرى تؤدي إلى أخطاء مثل:

خطأ C2589: '(' : رمز مميز غير قانوني على الجانب الأيمن من '::' خطأ C2059: خطأ في بناء الجملة: '::'
error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
على الرغم من محاولات تعريف NOMINMAX في هذه الملفات الإضافية، إلا أن المشكلة لا تزال قائمة.

تكمن المشكلة في حقيقة أن NOMINMAX يحدد الأسماء المستعارة لـ Windows min والحد الأقصى من وحدات الماكرو، مع الكتابة فوق إصدارات C القياسية التي توفرها . لحل هذه المشكلة، استخدم الأقواس حول استدعاءات std::min وstd::max:

(std::min)(x, y);
(std::min)(x, y);
يتجنب هذا الأسلوب استدعاء الوظيفة- مثل وحدات الماكرو، مما يسمح بتطبيق إصدارات C القياسية.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3