2009-06-30 17 views
14

Próbowałem napisać klasę w języku C++, i natrafiłem na dość dziwny problem: wywoływanie funkcji zewnętrznych wewnątrz klasy o tej samej nazwie jako klasa. To trochę dziwne, tak oto przykład:C++ - Wywołanie funkcji wewnątrz klasy o tej samej nazwie co klasa

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."); 
} 

Kompilator narzeka na przedostatniej linii, że nie może znaleźć funkcja A (char *), ponieważ jest wewnątrz klasy, a konstruktor ma taka sama nazwa jak funkcja. Mógłbym napisać inną funkcję na zewnątrz, jak:

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

a następnie zadzwonić outsideA wewnątrz :: C, ale wydaje się to głupie rozwiązanie problemu. Ktoś wie o lepszym sposobie rozwiązania tego problemu?

Odpowiedz

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

powinien działać dobrze. Zasadniczo mówi „użyj A znaleźć w globalnej przestrzeni nazw”

2

Proponuję użyć przestrzeni nazw. Umieść swoją klasę w innym obszarze nazw niż funkcja.

namespace my_namespace1 
{ 

void A() {} 

} 

namespace my_namespace2 
{ 

struct A {}; 

} 


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

Oczywiście, prawdziwe pytanie brzmi: dlaczego masz klasę i funkcję o innej nazwie? Dobrą łatwą regułą jest tworzenie klas o nazwie WithABeginningCapitalLetter i funkcji bez One. Wtedy nigdy nie będziesz miał tego problemu. Oczywiście, STL tego nie robi ...

Powiązane problemy