2016-07-28 1 views
-2

나는 공간에서 개인 정적 멤버와 클래스가있는 경우 :다른 네임 스페이스의 내부 정적 클래스 멤버를 정의

namespace A { 
class T { 
    public: 
     //functions 
    private: 
     static bool a; 
     static unsigned int b; 

그리고 같은 다른 파일이 클래스의 단위 테스트를하고있는 중이 야 :

namespace { 

bool A::T::a = false; 
unsigned int A::T::b = 1; 

/* tests declaring an instance of A...*/ 

나는 연타에서 오류가 나타납니다 :

error: cannot define or redeclare 'a' here because namespace '' does not enclose namespace 'T' error: cannot define or redeclare 'b' here because namespace '' does not enclose namespace 'T'

정적 개인 회원에 관한 다른 답변과 클래스 선언이있는 위치를 선언해야하는 필요성에 대해 살펴 보았습니다. 이는 내가 여기에서하고 있다고 생각하지만 오류가 여전히 나를 벗어납니다.

+0

'namespace {'는 익명입니다. 선언으로서의 정의가'네임 스페이스 A '에서 제안되었지만, 거기에서 할 수는 없다. –

답변

1

나는 아니, 당신은

있으며, 정적 개인 회원들과 클래스의 선언이 내가 여기서 뭘하고 믿는 것입니다,하는 곳을 선언 할 필요도 다른 답변 살펴 보았다 그러지 마. 선언이 "foo.h"에 있으면, 단위 테스트에 사용되는 파일이 아니라 "foo.cpp"에 정의가 있어야합니다.

하지만 여전히 오류가 발생합니다.

namespace { 

는 전역 상이한 익명 namespace 정의한다. 익명으로 선언 된 이름 namespace은 번역 단위에서만 볼 수 있습니다. 익명으로 정의 된 내용이 namespace 인 경우 namespace으로 선언해야합니다.

당신은 사용할 수 있습니다

bool A::T::a = false; 
unsigned int A::T::b = 1; 

더 나은 아직도 사용 :

namespace A { 

    bool T::a = false; 
    unsigned int T::b = 1; 

및하지 단위 테스트에서 .H 파일에 해당하는 .cpp 파일에 코드의 그 라인을 넣어 파일.

관련 문제