Стандартное чтение 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",

Другие вопросы по тегам