Using std::copy - error C2679: can't find correct binary '=' operator
I am trying to use a solution from this question:
- How do I iterate over cin line by line in C++?
The error message
c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2144): error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const Line' (or there is no acceptable conversion)
(and a bunch of template trace data after this)
I am using Visual C++ 2010 Express.
The code
#include<string>
#include<iostream>
#include<fstream>
#include<vector>
#include<iterator>
class Line
{
std::string data;
public:
friend std::istream& operator>>(std::istream& inputStream, Line& line)
{
std::getline(inputStream, line.data);
return inputStream;
}
operator std::string()
{
return data;
}
};
int main(int argc, char* argv[])
{
std::fstream file("filename.txt", std:开发者_如何学JAVA:fstream::in | std::fstream::out);
std::vector<std::string> lines;
// error is in one of these lines
std::copy(
std::istream_iterator<Line>(file),
std::istream_iterator<Line>(),
std::back_inserter(lines));
}
Here is correct version that compiles fine :
class Line
{
std::string data;
public:
friend std::istream& operator>>(std::istream& inputStream, Line& line)
{
std::getline(inputStream, line.data);
return inputStream;
}
operator std::string() const
{
return data;
}
};
The conversion operator needs to be const
.
I changed:
operator std::string()
To
operator std::string() const
and it compiled fine.
精彩评论