gpt4 book ai didi

c++ - 如何写入通过映射迭代器访问的 ofstream

转载 作者:太空狗 更新时间:2023-10-29 23:49:23 25 4
gpt4 key购买 nike

我有 ofstream 的 map .我正在查看一包消息,并希望将与特定符号相关的每条消息写入其各自的文件,实质上是将包文件分成更小的文件。它在我 << 时写入文件到 ofstream .然而,当我尝试 <<ofstream通过 map 迭代器访问它会崩溃,即使它编译得很好。

我使用映射的原因是确保不会为给定符号多次写入数据包 header 。

void write_packet_to_symbol_file(packet p)
{

string path = "E:\\20170131\\";
map<string,ofstream&> outs;
for (message m : p.messages) {
map<string,ofstream&>::iterator it = outs.find(m.symbol.name);
if (it == outs.end()) {
string full_path = path + m.symbol.name + ".CAP";
ofstream of;
of.open(full_path, ios_base::app);
// write packet header since first message for that symbol
of << p.get_header();
outs.emplace(m.symbol.name,of);
}

map<string,ofstream&>::iterator it2 = outs.find(m.symbol.name);
if (it2 != outs.end())
it2->second << m.get_message_content();
}

我做错了什么?

最佳答案

您的 ofstream 实例是 if 语句的局部变量,当 if 语句终止时将被关闭和丢弃。您几乎不想像映射那样使用引用集合,相反,您应该创建一个字符串映射到 ofstream 指针(最好是智能指针),动态创建 ofstreams,并废弃您已经编写的所有代码。

关于c++ - 如何写入通过映射迭代器访问的 ofstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259877/

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