С++ - вызов функции внутри класса с тем же именем, что и класс

Я пытался написать класс в С++, и я столкнулся с довольно странной проблемой: вызов внешних функций внутри класса с тем же именем, что и класс. Это немного запутанно, так вот пример:

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 (char *), потому что она находится внутри класса, а конструктор имеет то же имя, что и функция. Я мог бы написать другую функцию снаружи, например:

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

И затем вызовите outA внутри A:: C, но это кажется глупым решением проблемы. Кто-нибудь знает более подходящий способ решить эту проблему?

Ответы

Ответ 1

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

должен работать нормально. В основном это говорит: "Используйте A, найденный в глобальном пространстве имен"

Ответ 3

Я предлагаю вам использовать пространства имен. Поместите свой класс в другое пространство имен, чем функция.

namespace my_namespace1
{

void A() {}

}

namespace my_namespace2
{

struct A {};

}


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

Конечно, реальный вопрос: почему у вас есть класс и функция с другим именем? Хорошим простым правилом является создание классов с именемBeginningCapitalLetter и функциями withoutOne. Тогда у вас никогда не будет этой проблемы. Конечно, STL этого не делает...