2

의 C++ 부분 특수화와 에러 코드의 다음과 같은 덩어리를 들어 (정적 코드 분석을위한 훌륭한 도구를 http://www.gimpel.com/ 참조)나는 PC - 린트 사용하고 템플릿

inline void ASD::foo<1>() {} 
mysqldatabaseupdate.h(7) : Error 1060: protected member 'ASD::foo(void)' is not accessible to non-member non-friend functions 

나는 코드가 잘하고 오류가 보풀 측에 생각하지만, 나는 린트 도구는 정말 훌륭한 도구이며 내가 뭔가를 알고하지 않는 것보다 더 많은 것 같아요. 이 코드는 괜찮습니까?

답변

1

버그는 PC - 린트 그 자체였다. 최신 버전으로 수정되었습니다.

2

당신은 당신의 struct ASD하나 개의 기능 foo을 가지고 있고 그것은 protected 섹션에 있습니다. 비회원 기능에서는 액세스 할 수 없습니다. 동시에 struct ASD에는 다른 멤버 함수가 없습니다. 아무도 foo에 액세스 할 수 없기 때문에 이것이 오류 메시지의 원인이라고 생각합니다.

봅니다 예를 들어, 다음에 구조체를 변경하려면 :

class ASD { 
    public: 
     void bar() { foo<1>(); } 
    protected: 
     template<int N> 
     void foo(); 
}; 
+1

그러나 임의의 하위 클래스가'foo' 함수에 액세스하지 못합니까? –

+0

이 예제에서는 오류를 생성하는 코드에 하위 클래스가 없다고 생각합니다. –

+0

클래스에 가상 함수를 추가해보십시오. 여기에 트레이드 오프가있을 수 있습니다. –

관련 문제