Ответ 1
::A("Hello, world.");
должен работать нормально. В основном это говорит: "Используйте A
, найденный в глобальном пространстве имен"
Я пытался написать класс в С++, и я столкнулся с довольно странной проблемой: вызов внешних функций внутри класса с тем же именем, что и класс. Это немного запутанно, так вот пример:
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, но это кажется глупым решением проблемы. Кто-нибудь знает более подходящий способ решить эту проблему?
::A("Hello, world.");
должен работать нормально. В основном это говорит: "Используйте A
, найденный в глобальном пространстве имен"
Используйте оператор разрешения области видимости ::
для доступа к имени из глобальной области:
void A::C() {
::A("Hello, world.");
}
Я предлагаю вам использовать пространства имен. Поместите свой класс в другое пространство имен, чем функция.
namespace my_namespace1
{
void A() {}
}
namespace my_namespace2
{
struct A {};
}
int main()
{
my_namespace1::A();
my_namespace2::A my_a;
}
Конечно, реальный вопрос: почему у вас есть класс и функция с другим именем? Хорошим простым правилом является создание классов с именемBeginningCapitalLetter и функциями withoutOne. Тогда у вас никогда не будет этой проблемы. Конечно, STL этого не делает...