使用 std::error C2679:找不到正确的二进制"="运算符
Using std::error C2679: can't find correct binary '=' operator
我正在尝试使用这个问题的解决方案:
- 如何在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
它编译得很好。
相关文章:
- 消除好友和成员二进制运算符的歧义
- 如何为我的类实现/重载二进制运算符
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 你能帮我了解重载一元运算符和二进制运算符之间的区别吗?
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- 编译器如何区分二进制运算符和模板C++令牌>>
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 类型长的长度和未解决的超载函数类型的类型的操作数与二进制运算符
- 令牌之前缺少二进制运算符 "#" 当 #define 在 #if 内时出错
- 类没有合适的复制构造函数,找不到二进制运算符 '=',
- 如何使用 Boost Spirit x3 编写具有两个后操作数语法的二进制运算符?
- 编译器将输出的流运算符<<解释为用于按位左移的二进制运算符<<
- 如何修复二进制运算符
- 类指针和类指针指向二进制运算符+的类型无效的操作数
- 铛.嵌套模板的二进制运算符重载
- 如何解决错误:在Mac上令牌"("之前缺少二进制运算符?
- CLOCKS_PER_SEC,令牌之前缺少二进制运算符.[NFIQ 2.0]
- 令牌"("错误之前缺少 QT 二进制运算符