Error con especialización parcial C ++ de plantilla
-
29-09-2019 - |
Pregunta
estoy usando PC-Lint (gran herramienta para el análisis de código estático - ver http://www.gimpel.com / ) Para el siguiente trozo de código:
class ASD {
protected:
template<int N>
void foo();
};
template<>
inline void ASD::foo<1>() {}
template<int N>
inline void ASD::foo() {}
PC-pelusa me da una advertencia:
inline void ASD::foo<1>() {}
mysqldatabaseupdate.h(7) : Error 1060: protected member 'ASD::foo(void)' is not accessible to non-member non-friend functions
Creo que el código está muy bien y el error está en el lado de pelusa, pero creo que es la herramienta Lint herramienta realmente grande y es más probable que yo no sé algo. Así es el código OK?
Solución 2
El error era en sí mismo PC-Lint. Se ha corregido en la versión más reciente.
Otros consejos
Usted tiene único foo
función en su struct ASD
y está en la sección protected
. No se puede acceder desde las funciones que no son miembros. Al mismo tiempo struct ASD
no tiene ninguna otra función miembros. Así que nadie tiene acceso a foo
, creo que esta es la razón de que el mensaje de error.
Trate de cambiar su estructura a la siguiente, por ejemplo:
class ASD {
public:
void bar() { foo<1>(); }
protected:
template<int N>
void foo();
};