سؤال

وتحدثت فريقي في تشغيل تحذيرات المترجم مرة أخرى. بعض كيف تم تعطيل جميع التحذيرات (-w) (لا تسأل ...). معظمهم من اضحا ولكن واحد منهم هو مزعج حقا. أحصل عليه من وجهة نظري التاريخ والوقت الطبقات التي تستخدم في الكثير من الأماكن. القصة بسيطة حقا. الوقت هو فئة فرعية من التسجيل وكلا منهم مشغليها محددة. ماذا يمكن أن يكون الخطأ في ذلك؟ وهنا التحذير أحصل على:

Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.

وربما شخص ما يمكن أن يرتبط لي مستندات واصفا ما كل من تحذيرات مترجم صن ستوديو C ++ يعني؟ لا أستطيع العثور على هذا ... شكرا!

هل كانت مفيدة؟

المحلول

وأنا يمكن أن تساعدك مع هذا التحذير خاص - يبدو الكثير مثل هذا واحد من <لأ href = "http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9 "يختلط =" نوفولو noreferrer "> C ++ التعليمات لايت . هل بالصدفة تغيير نوع الحجة التي ACTime :: operator- يستخدم من واحد في ACDate؟

نصائح أخرى

ولقد رأيت هذا من قبل مع المترجم صن ستوديو. أساسا، لديك بناء مثل هذا:

class ACDate
{
   public:
     ACDate &operator-(const ACDate &);
};

class ACTime : public ACDate
{
    public:
    ACTime &operator-(const ACTime &);
};

ونظرا ل++ قواعد تحديد النطاق C، ACTime :: operator- يخفي ACDate :: operator- في سياق كائن ACTime. وهذا أمر طبيعي جدا ولكن المترجم صن ستوديو يحذر حول هذه المشكلة كما أنه قد يكون علامة على وجود تصفيات "افتراضية" في عداد المفقودين.

والحل واحد لهذا الوضع من شأنه أن يكون صريحا "باستخدام ACDate :: operator-" في تعريف فئة ACTime، ولكن قد لا تكون ما تريد.

و، ويحتمل أن أفضل حل آخر لموقفك هو جعل operator- صديق وظيفة خالية، ولكن هذا قد يؤدي إلى مشاكل أخرى مثيرة للاهتمام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top