как различать имена функций в C ++, если у меня такое же имя функции, но одно - C ++, а другое - C

0

предположим, что у меня есть класс с одним из имени члена метода, и внутри класса я использую функцию C для открытия и закрытия файла

таким образом, у меня будет две совершенно разные функции с одним и тем же именем, но одна из них C, а другая - C++.

Таким образом, когда я звоню близко, кажется, что компилятор запутался

    s = socket(PF_INET, SOCK_DGRAM, 0);
    close(s)

как решить эту проблему? благодаря

Теги:

3 ответа

5
Лучший ответ

Ваша функция:

close(s)

Функция в глобальном пространстве имен:

::close(s)
  • 0
    Я думаю, что вы ищете глагол Qualify .
  • 0
    Однако ::close(s) недопустим, потому что close также может быть определен как макрос; это разрешено POSIX (который определяет close ). Вам нужно #undef close перед использованием ::close действителен. Эта проблема недавно попала в кого-то, с кем я работал.
Показать ещё 4 комментария
2

Используйте оператор разрешения области (: :) для глобальной функции.

0

компилятор обычно меняет имя функций, которые вы определяете, на какое-то уникальное имя функции. поэтому, если вы используете функцию переопределения, у компилятора есть свое уникальное имя для каждой функции. Это делается с помощью обработки имени в C++. Вы должны прочитать концепцию смены имени, которая поможет вам решить проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню