предположим, что у меня есть класс с одним из имени члена метода, и внутри класса я использую функцию C для открытия и закрытия файла
таким образом, у меня будет две совершенно разные функции с одним и тем же именем, но одна из них C, а другая - C++.
Таким образом, когда я звоню близко, кажется, что компилятор запутался
s = socket(PF_INET, SOCK_DGRAM, 0);
close(s)
как решить эту проблему? благодаря
Ваша функция:
close(s)
Функция в глобальном пространстве имен:
::close(s)
Используйте оператор разрешения области (: :) для глобальной функции.
компилятор обычно меняет имя функций, которые вы определяете, на какое-то уникальное имя функции. поэтому, если вы используете функцию переопределения, у компилятора есть свое уникальное имя для каждой функции. Это делается с помощью обработки имени в C++. Вы должны прочитать концепцию смены имени, которая поможет вам решить проблему.
::close(s)
недопустим, потому чтоclose
также может быть определен как макрос; это разрешено POSIX (который определяетclose
). Вам нужно#undef close
перед использованием::close
действителен. Эта проблема недавно попала в кого-то, с кем я работал.