2013-11-01 6 views
-1

내가 그렇게하려고 :anon 사용. 네임 스페이스 함수. 네임 스페이스 범위

file.h

namespace { 
    void fun(); 
    const bool nevermind = Register(fun); 
} 

file.cpp

namespace { 
    void fun() { 
     do_some_job(); 
    } 
} 

연결 오류를 가졌어요. 함수 void fun()는 링커에서 찾을 수 없습니다. 나는 그렇게하려고하면

는 :

file.h

namespace { 
    void fun() { 
     do_some_job(); 
    } 
    const bool nevermind = Register(fun); 
} 

모두 확인 간다.

첫 번째 사례는 어떻게 컴파일하나요? * .h 파일에서 함수 정의를 원하지 않습니다.

답변

2

익명 네임 스페이스의 목적은 다른 곳에서는 해당 기능을 사용하지 못하도록하기위한 것입니다. 따라서 헤더에 정의하는 데는 거의 요하지 않습니다. 나는 익명의 네임 스페이스를 추가 할 때마다 컴파일러가 실제로 이것을 횡설수령적인 고유 한 이름 공간을 가진 네임 스페이스로 간주한다고 가정한다. 그래서 다른 익명의 네임 스페이스를 추가하면 같은 네임 스페이스가 아닙니다.

아래의 BoBTFish의 의견을 참조하십시오.

+1

아닙니다. 동일한 번역 단위 내의 두 개의 이름없는 네임 스페이스는 다른 번역 단위에서 고유 한 동일한 이름을 가진 것으로 간주됩니다. 그래서 당신은'.cpp' 파일의 최상위에있는 이름없는 네임 스페이스에서 선언을 가질 수 있고, 아래쪽에있는 다른 것에있는 정의를 가질 수 있습니다. – BoBTFish

+0

@BoBTFish : 좋습니다. 나를 고쳐 주셔서 고마워요! – villintehaspam