使用std :: vector.push_back()时会出现错误C2280
Got error C2280 when using std::vector.push_back()
我有错误" C2280:尝试引用已删除的函数" 在执行以下代码时编译错误:
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,每个人都有自己的文件读/写。
首先,以下是错误的,因为没有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));
}
流没有复制构造函数。您可能会实现自己的语义。
无法复制流。他们的复制构造函数和复制分配程序是delete
。考虑使用移动语义以及std::vector::emplace_back()
:
m_ofsHeader.emplace_back(std::move(ofs));
^~~~~~~ ^~~~
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 多级继承错误 C2280:"atttempting to reference a deleted function"
- 创建 std::thread 时出现错误 C2280,未在 C++ 中初始化
- C++错误:C2280 - 引用已删除函数的编译器错误?
- C++错误 C2280:尝试引用已删除的函数
- C++:具有 const int 的类的 vector.erase 实例给出"attempting to reference a deleted function"错误 C2280
- C++ 为什么不使用已删除的函数时编译器失败并显示错误代码 C2280
- C++错误 (C2280) 试图访问已删除的功能
- 使用std :: vector.push_back()时会出现错误C2280
- 尝试将对象添加到向量时,获取错误C2280
- Qt 编译错误:C2280:尝试引用已删除的函数
- 错误 C2280:'std::thread::thread(const std::thread &)':尝试引用已删除的函数
- 错误 C2280:尝试引用已删除的函数(原子<int>)
- 错误 C2280;运算符 =(const Employee &) 在执行 employees.erase() 时出现问题
- 错误 C2280.尝试引用已删除的函数.尝试从其数据结构中删除敌人和激光时出现此错误
- 错误C2280:试图引用已删除的函数(unique_ptr)
- 错误C2280:试图引用已删除的函数(试图调用vector.erase)
- 尝试使用osstream将int转换为字符串时出现错误C2280