テンプレートのC ++の部分専門化によるエラー
-
29-09-2019 - |
質問
私は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
コードは問題なく、エラーは糸くず側にあると思いますが、糸くずのツールは本当に素晴らしいツールであり、何かを知らないよりも可能性が高いと思います。このコードは大丈夫ですか?
解決 2
バグはPC-Lint自体にありました。最新バージョンで修正されています。
他のヒント
あなたが持っている 唯一 働き foo
あなたの中で struct ASD
そしてそれはにあります protected
セクション。非会員機能からはアクセスできません。同時に struct ASD
他のメンバー関数はありません。だから誰もアクセスできません foo
, 、これがそのエラーメッセージの理由だと思います。
たとえば、構造体を次のように変更してみてください。
class ASD {
public:
void bar() { foo<1>(); }
protected:
template<int N>
void foo();
};
所属していません StackOverflow