这里我有两段C ++代码应该写入文件中的一些数据。第一个是下面的,它的工作原理:
void ParameterManager::Save()
{
std::ofstream saveFile;
saveFile.open(path, std::ios::trunc | std::ios::out);
if (saveFile.is_open())
{
saveFile << "File opened. Begin saving.\n";
for (int i = 0; i < 4; ++i)
{
saveFile << "Hoppa" << std::endl;
}
}
saveFile.close();
}
输出文件中的结果是:
File opened. Begin saving.
Hoppa
Hoppa
Hoppa
Hoppa
与预期一样。 第二个是下面的,它不起作用:
void ParameterManager::Save()
{
std::ofstream saveFile;
saveFile.open(path, std::ios::trunc | std::ios::out);
if (saveFile.is_open())
{
saveFile << "File opened. Begin saving.\n";
for (auto item : map)
{
std::cout << "Hoppa" << std::endl;
saveFile << "Hoppa" << std::endl;
}
}
saveFile.close();
}
其中map是包含4个条目的哈希映射,并且它是实现Save函数的类的成员。输出文件中的结果是:
File opened. Begin saving.
Hoppa线在终端上打印但从未写入文件。我在调试模式下验证并执行写入4次,但内容未写入文件。 我在虚拟机windows 7 pro上测试它。主机是MacBookPro。我使用Visual Studio 2013 Pro。 你可以帮助我理解为什么第二版代码不能像预期的那样工作。 非常感谢你们所有人。
答案 0 :(得分:2)
Welp,我不知道,但是当我使用std::map<int, int>
并输入4 std::pair<int, int>
并使用相同的for
循环时它会起作用:
http://coliru.stacked-crooked.com/a/e694252e96aebab5
#include <iostream>
#include <fstream>
#include <string>
#include <map>
void save()
{
std::map<int, int> mappa;
for (size_t i = 0; i < 4; ++i) {
mappa.insert(mappa.begin(), std::pair<int, int>(i,i));
}
std::ofstream saveFile;
saveFile.open("test.txt", std::ios::trunc | std::ios::out);
if (saveFile.is_open())
{
saveFile << "File opened. Begin saving.\n";
for (auto it : mappa)
{
saveFile << "Hoppa" << std::endl;
std::cout << "PRINTED LINE" << std::endl;
}
}
saveFile.close();
}
int main() {
save();
}
答案 1 :(得分:0)
你可以尝试:
for (auto &item : map)
{
std::cout << item << std::endl;
saveFile << "Hoppa" << std::endl;
}