متغير C ++ بنفس الاسم، السياق: عالمي وخاص،
سؤال
في التعليمات البرمجية التالية، G ++ يعطي هذا الخطأ: 1.CPP: في وظيفة العضو void W::test()':
1.cpp:6: error:
INT F :: Glob 'هو 1.CPP خاص: 19: خطأ: في هذا السياق
ولكن، لا ينبغي أن تستخدم المتغير العالمي المعلن على مستوى العالم هنا، بدلا من "Glob" "Private"؟
#include <iostream.h>
int glob;
class F
{
int glob;
public:
void readIt()
{
cin >> glob;
}
};
class W : public F
{
public:
void test()
{
glob--;
}
};
int main()
{
}
المحلول
يتم الوصول إلى المتغيرات والوظائف باستخدام قواعد التراجع، وليس قواعد الضخمة. لأن F::glob
هل glob
في نطاق W::test()
, ، يتم استخدامها. ومع ذلك، W::test()
ليس لديه حق الوصول إلى F::glob
, ونتائج خطأ. المحول البرمجي لا ليس تحقق من وجود ::glob
نظرا لأن هناك شيئا آخر يدفعه في نطاق "الأولوية" (غير متأكد من المصطلح الدقيق).
نصائح أخرى
ظلال الغروب الخاصة على الغروب العالمية، وبالتالي فإن الخطأ هو الاستخدام الصحيح :: Glob للوصول إلى المتغير العالمي إذا كنت نيتل على استخدام المتغير العالمي
يمكنك محاولة استخدام ::glob--;
في حين أن. وبهذه الطريقة التي تخبرها بالمترجم لاستخدام مساحة الاسم العالمية.
سيتم استخدام عضو الطبقة هنا، للوصول إلى استخدام المتغير العالمي :: المشغل.