错误C2679:二进制' =' :没有操作员

时间:2015-09-29 20:00:55

标签: c++

我编写了一个文件加载器/编辑器,我遇到了这样的问题: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
    }

可能是什么问题?

2 个答案:

答案 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());