2017-02-04 6 views
-2

при попытке прочитать/записать мою программу записывает в файл правильно, но не читает правильно.Чтение/запись файла на C++

Где l, w, n - ints и transposed - bool.

void Matrix::operator >> (ifstream & f) 
{ 
    f >> l; //length (int) 
    f >> w; //width (int) 
    f >> n; //size (int) 
    f >> transposed; //(bool) 

    theMatrix = vector<double>(0); 
    double v; 
    for (int i = 0; i < n; ++i) { 
     f >> v; 
     cout << " pushing back " << v << endl; 
     theMatrix.push_back(v); 
    } 
} 

void Matrix::operator<<(ostream & o) 
{ 
    o << l; 
    o << w; 
    o << n; 
    o << transposed; 

    //theMatrix is a vector<double> 
    for (double v : theMatrix) { 
     o << v; 
    } 
} 

Я предполагаю, что этот вопрос связан с считанных operator >> не знает, сколько байт для чтения из записи в то время как operator << не писать определенное количество бит/байт. Есть ли способ прояснить, сколько байтов для чтения/записи, чтобы моя программа записывала соответственно?

Я не новичок в C++, но я новичок в его структуре ввода-вывода. Я испорчен методами Java-сериализации.

+0

Непосредственно перед '' оператора << генерирует выходной сигнал, он создает совершенно пустой 'VECTOR', и пытается вывести содержимое этого пустого вектора. Неудивительно, что результатов нет. Где именно вы ожидали вывода из этого пустого вектора? –

+0

Обычным способом является перегрузка автономных операторских функций 'std :: ostream & operator << (std :: ostream, const Matrix &)' и 'std :: istream & operator >> (std :: istream, Matrix &)'. –

+1

'<<' and '>>' не используются для двоичного ввода-вывода, они считывают и записывают форматированные данные. Вам нужно поместить пробелы между каждым значением, когда вы его напишете, чтобы функция ввода узнала, где заканчивается каждое число. – Barmar

ответ

1

Вам нужно пробел между значениями, которые вы печатаете, чтобы при чтении его в нем знали, где заканчивается каждое значение. Поместите пробел между каждым из них. И правильный способ определить оператор вывода для типа T это с подписью std::ostream& operator<<(std::ostream, const T&)

std::ostream& operator<<(std::ostream o, const Matrix& m) 
{ 
    o << m.l << ' ' << m.w << ' ' << m.n << ' ' << m.transposed << ' '; 

    //theMatrix is a vector<double> 
    for (double v : m.theMatrix) { 
     o << v << ' '; 
    } 
}