خطأ مع C ++ التخصص الجزئي للقالب
-
29-09-2019 - |
سؤال
أنا أستخدم الكمبيوتر الشخصي (أداة رائعة لتحليل الكود الثابت - انظر 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();
};
لا تنتمي إلى StackOverflow