Вопрос

Я использую 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();
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top