我编写了一个文件加载器/编辑器,我遇到了这样的问题:C2679: binary '=' : no operator found
,它采用类型为std::_Vector_iterator<_Myvec>
的右侧操作数(或者没有可接受的转换)
std::string szName;
szName = "";
ReadFile(hFile, &nL, 4, &dwRWC, NULL);
if(nL > 0)
{
std::vector<char> buffer(nL+1, NULL);
ReadFile(hFile, &buffer.begin(), nL, &dwRWC, NULL);
szName = buffer.begin(); //problem is here
}
可能是什么问题?
答案 0 :(得分:1)
首先,这段代码是错误的:
ReadFile(hFile, &buffer.begin(), nL, &dwRWC, NULL);
您正在尝试读取迭代器本身,而不是std::vector
数据。这实际上不应该编译,因为您获取的临时地址不是左值,但很可能由于“友好”的MS扩展而编译,允许临时到左值转换。所以无论如何代码应该是:
ReadFile(hFile, &buffer[0], nL, &dwRWC, NULL);
对字符串的赋值可以是:
message = std::string( buffer.begin(), buffer.end() );
答案 1 :(得分:-1)
begin
将返回一个迭代器,您尝试将其分配给char
。要么取消引用迭代器
szName = *(buffer.begin());
或只是致电front
szName = buffer.front();
修改
如果szName
不而不是char
而是std::string
,那么您应该执行以下操作来构建std::string
szName = std::string(buffer.begin(), buffer.end());