سؤال

أنا أستخدم الكمبيوتر الشخصي (أداة رائعة لتحليل الكود الثابت - انظر http://www.gimpel.com/) لجزء رمز التالي:

class ASD {
    protected:
        template<int N>
        void foo();
};

template<>
inline void ASD::foo<1>() {}

template<int N>
inline void ASD::foo() {}

PC-Lint يعطيني تحذيرًا:

inline void ASD::foo<1>() {}
mysqldatabaseupdate.h(7) : Error 1060: protected member 'ASD::foo(void)' is not accessible to non-member non-friend functions

أعتقد أن الرمز جيد والخطأ على جانب الوبر ، لكنني أعتقد أن أداة LINT هي أداة رائعة حقًا ومن الأرجح مما لا أعرف شيئًا. فهل هذا الرمز جيد؟

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

المحلول 2

كان الخطأ في الكمبيوتر الشخصي نفسه. تم إصلاحه في أحدث إصدار.

نصائح أخرى

عندك واحد فقط وظيفة foo في الخاص بك struct ASD وهو في protected الجزء. لا يمكن الوصول إليه من الوظائف غير الأعضاء. في نفس الوقت struct ASD ليس لديه أي وظائف عضو أخرى. لذلك لا أحد يستطيع الوصول إليه foo, ، أعتقد أن هذا هو سبب رسالة الخطأ هذه.

حاول تغيير بنيتك إلى ما يلي ، على سبيل المثال:

class ASD {
    public:
        void bar() { foo<1>(); }
    protected:
        template<int N>
        void foo();
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top