Errore con C ++ specializzazione parziale di template
-
29-09-2019 - |
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?
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();
};