Код серьезности Описание Ошибка в файле подавления строки файла проекта C2676, двоичный файл «>>»: «std :: ifstream» - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь определить функцию в заголовочном файле, который принимает 2 аргумента, std :: ifstream и char * .. Функция собирается проверить, есть ли аргумент типа char * в файле, затем вернуть true, иначе вернет false. компилятор показывает мне сообщение об ошибке «>>» с ссылкой ifstream

P.S Обратите внимание, что я определяю функцию во внешнем моем собственном заголовочном файле

сначала я передал параметр fstream, затем изменил на ifstream, но то же сообщение об ошибке

bool check_for_valid_name(std::ifstream &file, char* name) {
    char data[sizeof(name)];
    while (file.eof()) {
        file >> data;
        if (strcmp(data, name)) {
            return true;
        }
    }
    return false;
}

все должно работать нормально, просто верните false или true, но компилятор выдает ошибку: Код серьезности Описание Проект Состояние файла Подавление строки Ошибка C2676 бинарный '>>': 'std :: ifstream'

1 Ответ

0 голосов
/ 12 мая 2019

Возможно, вы получили ошибку, потому что ваше while условие неверно.Вы должны прочитать файл до конца файла.Однако с первой попытки вы получаете false.Кроме того, вот мои предложения перед чтением данных из файла.

  • Пожалуйста, убедитесь, что файл уже существует или нет.is_good() будет использоваться.
  • Пожалуйста, используйте const, если параметры функции не будут изменены в функции.Для вашего случая bool check_for_valid_name(const std::ifstream &file, const char* name)
  • sizeof(name) будет рассчитываться как указатель, поэтому он может быть 4 или 8 байт в зависимости от вашей архитектуры.Если это не ваша ожидаемая длина, используйте вместо этого strlen().
  • Если в вашей реализации нет никаких ограничений, используйте std :: string вместо массивов символов.Это поможет вам избавиться от всех функций в стиле C.
...