gpt4 book ai didi

c++ - 使用 std::vector.push_back() 时出现错误 C2280

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:15 24 4
gpt4 key购买 nike

我在执行以下代码时遇到错误“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,每个 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 存储到 vector 中的流中:

#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));
}

关于c++ - 使用 std::vector.push_back() 时出现错误 C2280,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com