使用 std::vector.push_back() 时出现错误 C2280
Got error C2280 when using std::vector.push_back()
我在执行以下代码时遇到错误 "C2280: attempting to reference a deleted function" 编译错误:
std::ofstream ofs(m_headerFileName, std::ios::binary, std::ios_base::app);
m_ofsHeader.push_back(ofs);
哪里
std::vector<std::ofstream> m_ofsHeader;
我不明白为什么我不能将 ofstream
实例推入 ofstream
vector
。有人给出一些提示吗?谢谢。我在 Windows 7 和 Visual Studio 2015。
另外,如果有的话,这里的解决方法是什么?
我正在尝试保留一堆 ifstream/ofstream,每个都有自己的文件 read/write。
流没有复制构造函数。您可以实现自己的语义或移动语义。
无法复制流。他们的复制构造函数和复制分配器被标记为delete
。考虑使用移动语义以及 std::vector::emplace_back()
:
m_ofsHeader.emplace_back(std::move(ofs));
^~~~~~~ ^~~~
首先,以下是错误的,因为没有std::ofstream
构造函数接受三个参数:
std::ofstream ofs(m_headerFileName, std::ios::binary, std::ios_base::app);
你的意思可能是:
std::ofstream ofs(m_headerFileName, std::ios::binary | std::ios::app)
然后是存储问题。无法复制流,这就是您的 push_back
失败的原因。
您可以只移动流:
#include <fstream>
#include <vector>
#include <ios>
int main()
{
std::vector<std::ofstream> streams;
std::ofstream os("foo.txt", std::ios::binary | std::ios::app);
streams.push_back(std::move(os));
}
注意 std::move
,它强制转换 os
,以便使用 push_back
的 &&
重载。
或者您将 std::unique_ptr
s 存储到向量中的流中:
#include <fstream>
#include <memory>
#include <vector>
#include <ios>
int main()
{
std::vector<std::unique_ptr<std::ofstream>> streams;
auto os = std::make_unique<std::ofstream>("foo.txt", std::ios::binary | std::ios::app);
streams.push_back(std::move(os));
}
我在执行以下代码时遇到错误 "C2280: attempting to reference a deleted function" 编译错误:
std::ofstream ofs(m_headerFileName, std::ios::binary, std::ios_base::app);
m_ofsHeader.push_back(ofs);
哪里
std::vector<std::ofstream> m_ofsHeader;
我不明白为什么我不能将 ofstream
实例推入 ofstream
vector
。有人给出一些提示吗?谢谢。我在 Windows 7 和 Visual Studio 2015。
另外,如果有的话,这里的解决方法是什么?
我正在尝试保留一堆 ifstream/ofstream,每个都有自己的文件 read/write。
流没有复制构造函数。您可以实现自己的语义或移动语义。
无法复制流。他们的复制构造函数和复制分配器被标记为delete
。考虑使用移动语义以及 std::vector::emplace_back()
:
m_ofsHeader.emplace_back(std::move(ofs));
^~~~~~~ ^~~~
首先,以下是错误的,因为没有std::ofstream
构造函数接受三个参数:
std::ofstream ofs(m_headerFileName, std::ios::binary, std::ios_base::app);
你的意思可能是:
std::ofstream ofs(m_headerFileName, std::ios::binary | std::ios::app)
然后是存储问题。无法复制流,这就是您的 push_back
失败的原因。
您可以只移动流:
#include <fstream>
#include <vector>
#include <ios>
int main()
{
std::vector<std::ofstream> streams;
std::ofstream os("foo.txt", std::ios::binary | std::ios::app);
streams.push_back(std::move(os));
}
注意 std::move
,它强制转换 os
,以便使用 push_back
的 &&
重载。
或者您将 std::unique_ptr
s 存储到向量中的流中:
#include <fstream>
#include <memory>
#include <vector>
#include <ios>
int main()
{
std::vector<std::unique_ptr<std::ofstream>> streams;
auto os = std::make_unique<std::ofstream>("foo.txt", std::ios::binary | std::ios::app);
streams.push_back(std::move(os));
}