2009-06-30 4 views
14

C++로 클래스를 작성하려고했는데, 같은 이름을 가진 클래스 내부에서 외부 함수를 호출하는 다소 이상한 문제가 발생했습니다. 클래스로. 그것은, 그래서 여기에 예를 들어 좀 혼란 것 :C++ - 클래스와 같은 이름의 클래스에서 함수 호출하기

void A(char* D) { 
    printf(D); 
} 

class A 
{ 
public: 
    A(int B); 
    void C(); 
}; 

A::A(int B) { 
    // something here 
} 

void A::C() { 
    A("Hello, World."); 
} 

는 클래스 내부에 있기 때문에 컴파일러는,이 함수 A (숯불 *)를 찾을 수없는 마지막 줄에 두 번째로 불평 생성자가있다 함수와 같은 이름. 나는 같은 외부의 다른 기능을 쓸 수있다 :

ousideA(char* D) { 
    A(D); 
} 

후 ::의 C의 내부 outsideA 부르지 만,이 문제에 바보 솔루션처럼 보인다. 누구든지이 문제를 해결하는 더 적절한 방법을 알고 있습니까?

답변

35
::A("Hello, world."); 

잘 작동합니다. 기본적으로는 "글로벌 네임 스페이스에있는 A을 사용하여"말하는

2

네임 스페이스를 사용하는 것이 좋습니다. 클래스를 함수와 다른 네임 스페이스에 넣으십시오.

namespace my_namespace1 
{ 

void A() {} 

} 

namespace my_namespace2 
{ 

struct A {}; 

} 


int main() 
{ 
    my_namespace1::A(); 
    my_namespace2::A my_a;  
} 

물론 진짜 질문은 왜 다른 이름의 클래스와 함수가 있습니까? 좋은 규칙은 WithABeginningCapitalLetter라는 클래스와 withoutOne 함수를 만드는 것입니다. 그렇다면이 문제는 결코 발생하지 않을 것입니다. 물론, STL은 이것을하지 않습니다 ...