"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يظهر لي خطأ \"رمز خارجي لم يتم حله\" عند تعيين حقل ثابت في C++؟

لماذا يظهر لي خطأ \"رمز خارجي لم يتم حله\" عند تعيين حقل ثابت في C++؟

تم النشر بتاريخ 2024-11-09
تصفح:717

Why Am I Getting \

الرمز الخارجي الذي لم يتم حله لحقل الكائن الثابت

تبحث هذه المقالة في رسالة الخطأ "خطأ LNK2001: رمز خارجي لم يتم حله" الذي تمت مواجهته عند محاولة التعيين حقل ثابت في فئة من الطريقة الرئيسية.

في مقتطف التعليمات البرمجية المقدم، يتم الإعلان عن الحقل الثابت "أ" في الفئة "ب" ضمن تعريف الفئة نفسها. ومع ذلك، وفقًا لمعيار C، لا تعتبر هذه الإعلانات تعريفات. بالنسبة لأعضاء البيانات الثابتة، يجب أن يظهر التعريف المناسب خارج الفئة في نطاق مساحة الاسم المتضمن، باستخدام عامل التشغيل "::".

تُعرف القاعدة التي تحكم هذا المطلب بقاعدة التعريف الواحد (ODR)، والذي يفرض أن يكون لكل كيان (بما في ذلك أعضاء البيانات الثابتة) تعريف فريد واحد في البرنامج بأكمله. تضمن هذه القاعدة عدم وجود أي غموض فيما يتعلق بقيمة العضو الثابت.

لذلك، لحل الخطأ، يجب تعديل التعليمات البرمجية على النحو التالي، حيث يتم تعريف "a" في نطاق مساحة الاسم:

class A
{
public:
    A()
    {

    }
};

class B
{
public:
    static A* a;
};

A* B::a; // Definition in namespace scope

int main()
{
    B::a = new A;
}

من خلال التحديد الصريح للعضو الثابت خارج الفصل، يمكن للرابط حل مرجع الرمز بشكل صحيح وسيتم تجميع التعليمات البرمجية بنجاح.

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

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

Copyright© 2022 湘ICP备2022001581号-3