Стандартное чтение POSIX, затененное методом read с другой сигнатурой - PullRequest
2 голосов
/ 18 июля 2009

У меня есть класс C ++ File с функцией чтения, который должен считывать все содержимое файла (как это делает Python) в буфер. Однако, когда я пытался вызвать функцию чтения из unistd.h, я получаю:

file.cpp: 21: ошибка: не соответствует функция для вызова ‘File :: read (int &, char * &, int)’

file.cpp: 17: примечание: кандидаты: char * File :: read ()

Что я делаю не так? У них совершенно разные подписи, почему я не могу просто назвать это?

Ответы [ 2 ]

4 голосов
/ 18 июля 2009

Вы пытались быть откровенным о сфере действия;

char* File::read()
{
   // Double-colon to get to global scope
   ::read(...);
   // ..
}

2 голосов
/ 18 июля 2009

Определение для стандартной версии метода чтения posix определено как extern "C". Это необходимо для того, чтобы символ чтения не искажался компилятором C ++ и не связывался с соответствующей функцией в библиотеке. Смешивание и сопоставление символов C и C ++ приведет к непредсказуемым результатам. Если возможно, переименуйте функцию c ++, чтобы не конфликтовать с какими-либо символами, которые объявлены extern "C".

...