使用 std::error C2679:找不到正确的二进制"="运算符

Using std::error C2679: can't find correct binary '=' operator

本文关键字:二进制 运算符 std error C2679 找不到 使用      更新时间:2023-10-16

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

  • 如何在C++中逐行迭代cin

错误消息

c: \program files(x86)\microsoft visual studio 10.0\vc\include\xutility(2144):错误C2679:二进制"=":找不到接受"const Line"类型右侧操作数的运算符(或没有可接受的转换)

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

我正在使用Visual C++2010学习版。

代码

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

以下是编译良好的正确版本:

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

我更改了:

  operator std::string()

operator std::string() const

它编译得很好。