Domanda

Sto utilizzando PC-Lint (ottimo strumento per l'analisi statica del codice - vedi http://www.gimpel.com / ) Per il seguente pezzo di codice:

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

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

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

PC-lint mi dà un avvertimento:

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

Credo che il codice è fine e l'errore è sul lato niente, ma penso strumento Lint è davvero grande strumento ed è più probabile che non lo so qualcosa. Quindi è questo codice OK?

È stato utile?

Soluzione 2

Il bug era in PC-Lint stesso. E 'stato risolto nella versione più recente.

Altri suggerimenti

Devi un solo la funzione foo nel vostro struct ASD ed è nella sezione protected. E non è accessibile dalle funzioni terzi. Allo stesso tempo, struct ASD non ha altre funzioni membro. Così nessuno ha accesso a foo, credo che questo sia il motivo di tale messaggio di errore.

Prova a modificare la struttura per quanto segue, per esempio:

class ASD {
    public:
        void bar() { foo<1>(); }
    protected:
        template<int N>
        void foo();
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top