2011-06-10 70 views
1

我试图使用从这个问题的解决方案:使用std ::复制 - 错误C2679:无法找到正确的二进制 '=' 操作

错误信息

C:\程序文件(86)\微软的Visual Studio 10.0 \ VC \包括\ xutility(2144):错误C2679:二进制 '=':没有操作员发现它接受一个右手OPE兰特类型“const的线”的(或不存在可接受的转化率)

(并在此之后一堆模板跟踪数据)

我使用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)); 
} 
+0

还有一个类似的错误(我认为)GCC:http://codepad.org/G3Chty9K – 2011-06-10 06:51:40

回答

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

2

我改变:

operator std::string() 

operator std::string() const 

,它编译罚款。

相关问题