Question

J'utilise PC-Lint (outil d'analyse de code statique - voir http://www.gimpel.com / ) Pour le morceau de code suivant:

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

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

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

PC-lint me donne un avertissement:

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

Je crois que le code est bien et l'erreur est du côté de la fibre, mais je pense que l'outil Lint est vraiment super outil et il est plus probable que je ne sais pas quelque chose. Alors est-ce code OK?

Était-ce utile?

La solution 2

Le bogue a été dans PC-Lint lui-même. Il a été corrigé dans la dernière version.

Autres conseils

Vous avez une seule fonction foo dans votre struct ASD et il est dans la section protected. Il n'est pas accessible à partir de fonctions non-membres. Dans le même temps struct ASD n'a pas d'autres fonctions membres. Donc personne ont accès à foo, je crois que c'est la raison de ce message d'erreur.

Essayez de changer votre struct à ce qui suit, par exemple:

class ASD {
    public:
        void bar() { foo<1>(); }
    protected:
        template<int N>
        void foo();
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top