2

Я использую PC-Lint (отличный инструмент для статического анализа кода - см http://www.gimpel.com/) Для следующего фрагмента кода:Ошибки при частичной специализации C++ шаблон

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 инструмент действительно отличный инструмент, и это более вероятно, чем я не знаю, что-то. Так и этот код в порядке?

ответ

1

ошибка была в самом PC-Lint. Он был исправлен в новейшей версии.

2

Вы только одну функциюfoo в вашем struct ASD и находится в разделе protected. Он недоступен из функций, не являющихся членами. В то же время struct ASD не имеет других функций-членов. Поэтому никто не имеет доступа к foo, я считаю, что причина этого сообщения об ошибке.

Попробуйте изменить-структуру к следующему, например:

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

Но не было ли у каких-либо произвольных дочерних классов доступ к функции 'foo'? –

+0

В этом примере, и я верю в код, который производит ошибку, нет дочерних классов. –

+0

Попробуйте добавить к классу виртуальную функцию. Это может сделать компромисс здесь. –

 Смежные вопросы

  • Нет связанных вопросов^_^