Стандартное чтение POSIX, затененное методом read с другой сигнатурой
У меня есть класс C++ File с функцией чтения, который должен считывать все содержимое файла (как это делает Python) в буфер. Однако когда я попытался вызвать функцию чтения из unistd.h, я получил:
file.cpp: 21: ошибка: не найдена соответствующая функция для вызова File::read(int&, char*&, int) '
file.cpp:17: примечание: кандидаты: char* File::read()
Что я делаю неправильно? У них совершенно разные подписи, почему я не могу просто назвать это?
2 ответа
Вы пытались быть откровенным о сфере применения;
char* File::read()
{
// Double-colon to get to global scope
::read(...);
// ..
}
?
Определение для стандартной версии метода чтения posix определяется как extern "C"
, Это необходимо для того, чтобы символ чтения не искажался компилятором C++ и не связывался с соответствующей функцией в библиотеке. Смешивание и сопоставление символов C и C++ приведет к непредсказуемым результатам. Если возможно, переименуйте функцию C++, чтобы не конфликтовать с какими-либо объявленными символами. extern "C"
,