diff --git a/gtsam/base/Matrix.cpp b/gtsam/base/Matrix.cpp index e11263d3b..1369f13b8 100644 --- a/gtsam/base/Matrix.cpp +++ b/gtsam/base/Matrix.cpp @@ -248,11 +248,12 @@ istream& operator>>(istream& inputStream, Matrix& destinationMatrix) { coeffs.push_back(vector()); if(!first) coeffs.back().reserve(width); - std::copy(istream_iterator(stringstream(line)), istream_iterator(), + stringstream lineStream(line); + std::copy(istream_iterator(lineStream), istream_iterator(), back_insert_iterator >(coeffs.back())); if(first) width = coeffs.back().size(); - if(coeffs.size() != width) + if(coeffs.back().size() != width) throw runtime_error("Error reading matrix from input stream, inconsistent numbers of elements in rows"); ++ height; } @@ -262,7 +263,10 @@ istream& operator>>(istream& inputStream, Matrix& destinationMatrix) { int row = 0; BOOST_FOREACH(const vector& rowVec, coeffs) { destinationMatrix.row(row) = Eigen::Map(&rowVec[0], width); + ++ row; } + + return inputStream; } /* ************************************************************************* */ diff --git a/gtsam/base/Matrix.h b/gtsam/base/Matrix.h index 2c13ee7d4..e113e4cf1 100644 --- a/gtsam/base/Matrix.h +++ b/gtsam/base/Matrix.h @@ -188,7 +188,7 @@ void save(const Matrix& A, const std::string &s, const std::string& filename); * tab-, space-, or comma-separated, similar to the format read by the MATLAB * dlmread command. */ -istream& operator>>(istream& inputStream, Matrix& destinationMatrix); +std::istream& operator>>(std::istream& inputStream, Matrix& destinationMatrix); /** * extract submatrix, slice semantics, i.e. range = [i1,i2[ excluding i2