Ошибка с частичной специализацией шаблона C ++
-
29-09-2019 - |
Вопрос
Я использую PC -Lint (отличный инструмент для анализа статического кода - см. 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();
};