Использование std :: copy - ошибка C2679: невозможно найти правильный двоичный оператор '=' - PullRequest
1 голос
/ 10 июня 2011

Я пытаюсь использовать решение из этого вопроса:

Сообщение об ошибке

c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ include \ xutility (2144): ошибка C2679: двоичный файл '=': не найден оператор, который принимает правый операнд типа '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 ]

2 голосов
/ 10 июня 2011

Я изменил:

  operator std::string()

На

operator std::string() const

и он скомпилирован нормально.

2 голосов
/ 10 июня 2011

Вот правильная версия, которая прекрасно компилируется:

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.

...