为什么在传递 std::ofstream 作为参数时使 "use of deleted" 函数?

Why do I make "use of deleted" function when passing a std::ofstream as parameter?

我有一个成员 std::ofstream fBinaryFile 和一个

void setFile( std::ofstream& pBinaryFile ) 
{
    fBinaryFile = pBinaryFile;
}

输出:

 Data.h:86:16: error: use of deleted function ‘std::basic_ofstream<char>& std::basic_ofstream<char>::operator=(const
 std::basic_ofstream<char>&)’
     fBinaryFile = pBinaryFile;
                 ^

我知道在 std::ofstream 中复制是不允许的,也许我遗漏了什么。 pBinaryFile的内容可以保存在fBinaryfile吗?

因为相关运算符声明为

ofstream& operator= (const ofstream&) = delete;

这意味着它被明确禁止,因此 ofstream 语义确实支持复制。

根据您的体系结构,您可以存储 pointer/reference 或移动它。

如果要将 pBinaryFile 的内容复制到 fBinaryFile,则需要将 pBinaryfile 声明为 ifstream(输入文件流),而不是 ofstream(输出文件流) 它应该看起来像这样:

std::ifstream pBinaryFile;
std::ofstream fBinaryFile;
std::stringstream sstream;
std::string line
pBinaryFile.open(pBinaryFileName.c_str());
fBinaryFile.open(fBinaryFileName.c_str());
if (pBinaryFile.isopen()) {
    while (pBinaryFile.good()) {
        getline(pBinaryFile, line);
        fBinaryFile << sstream(line) << endl;
    }
}
pBinaryFile.close();
fBinaryFile.close();

请注意,pBinaryFileName 和 fBinaryFileName 指的是您的文件的路径。

此代码可能有错误,但我认为解决方案与此类似。

我建议进一步阅读:

http://www.cplusplus.com/doc/tutorial/files/