为什么在传递 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 指的是您的文件的路径。
此代码可能有错误,但我认为解决方案与此类似。
我建议进一步阅读:
我有一个成员 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 指的是您的文件的路径。
此代码可能有错误,但我认为解决方案与此类似。
我建议进一步阅读: