我正在使用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工具真的很棒的工具,它比我不知道的东西更可能。那么这段代码好吗?
答案 0 :(得分:2)
foo
中只有只有一个函数struct ASD
,它位于protected
部分。无法从非成员函数访问它。同时struct ASD
没有任何其他成员函数。所以没有人可以访问foo
,我相信这就是错误信息的原因。
尝试将结构更改为以下内容,例如:
class ASD {
public:
void bar() { foo<1>(); }
protected:
template<int N>
void foo();
};
答案 1 :(得分:1)
该错误发生在PC-Lint本身。它已在最新版本中修复。