Ошибка компилятора C ++ с stringbuf / ifstream - PullRequest
1 голос
/ 25 января 2011

Я не могу понять, почему моему компилятору (MSVC ++ 2010) не нравится этот код:

    // get_sum(filename as c-string) returns sum from file
    int get_sum(const char* const s) {
        stringbuf bill_buf;
        ifstream bill_file;
        bill_file.open(s);
        bill_file.get(bill_buf, '\0');  // read whole file
        bill_file.close();
        return get_sum_from_string(bill_buf.str());
}

Я получаю эти ошибки (я перевел их с немецкого на английский и дал правильные номера строк для выдержки из кода без начального комментария):

  1. Ошибка 1, ошибка C2079: в bill_buf используется неопределенный класс 'std :: basic_stringbuf <_Elem, _Traits, _Alloc>' (строка 2)

  2. Ошибка 2, ошибка C2664: 'std :: basic_istream <_Elem, _Traits> & std :: basic_istream <_Elem, _Traits> :: get (_Elem *, std :: streamsize)': преобразование параметра 1 из ' int 'to' char * 'невозможен (строка 5)

  3. Ошибка 3, ошибка C2228: Слева от ".str" должен быть класс / структура / объединение. (Строка 7)

Кто-нибудь понял, что там происходит? Большое спасибо! (Если у кого-то есть идея, как быстро собрать все содержимое файла в строку, я также буду признателен)

Ответы [ 4 ]

4 голосов
/ 25 января 2011

Для # 1 вы, вероятно, забыли #include <sstream> и имеете только предварительное объявление из какого-то другого заголовка в области видимости. № 2 и № 3 - ошибки последующих действий, не обращайте на них внимания, сначала исправьте № 1 и продолжайте.

3 голосов
/ 25 января 2011

Вам не хватает включения. Вот ваш код, на этот раз без использования streambuf:

#include<fstream>
#include<string>
#include<iterator>

int get_sum(const char* const s) {
    std::ifstream bill_file(s);
    std::string contents((std::istreambuf_iterator<char>(bill_file)),
                         std::istreambuf_iterator<char>());
    return get_sum_from_string(contents);
}
2 голосов
/ 25 января 2011

Похоже, вам нужно #include <sstream>.

0 голосов
/ 25 января 2011

1) В вашем заголовочном файле (.h) вы должны указать «using namespace std».В противном случае все ваши потоковые операции / переменные и т. Д. Должны начинаться с 'std ::'

2) Вы включили правильные заголовки?Вы должны добавить

#include <sstream>
...