2

我正在使用 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 方面,但我认为 Lint 工具真的是很棒的工具,而且它更有可能比我不知道的东西。那么这段代码可以吗?

4

2 回答 2

2

只有一个功能foostruct ASD它在该protected部分中。它不能从非成员函数访问。同时struct ASD没有任何其他成员函数。所以没有人可以访问foo,我相信这就是该错误消息的原因。

尝试将您的结构更改为以下内容,例如:

class ASD {
    public:
        void bar() { foo<1>(); }
    protected:
        template<int N>
        void foo();
};
于 2010-08-18T13:48:59.947 回答
1

该错误存在于 PC-Lint 本身中。它已在最新版本中修复。

于 2010-09-16T14:14:43.820 回答