使用std :: copy - 错误C2679:找不到正确的二进制'='运算符

时间:2011-06-10 06:48:39

标签: c++ copy compiler-errors iostream

我正在尝试使用此问题的解决方案:

错误消息

  

c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xutility(2144):error C2679:binary'=':找不到运算符,它采用'const Line'类型的右手操作数(或者没有可接受的转换)

(以及此后的一堆模板跟踪数据)

我正在使用Visual C ++ 2010 Express。

代码

#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::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));
}

2 个答案:

答案 0 :(得分:2)

这是编译正确的正确版本:

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;
        }
};

转化运算符必须为const

答案 1 :(得分:2)

我改变了:

  operator std::string()

operator std::string() const

它编译得很好。