我创建了一个具有指定名称的文件:
#include <fstream>
SYSTEMTIME systime;
GetSystemTime (&systime);
CString filename;
filename = specifyNameOfFile(timestamp, suffix); // call a method
std::ofstream fstream(filename, std::ios_base::app | std::ips_base::out);
我想创建一个像
这样的方法void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char result);
void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char result)
{
fstream << count << " " << hour << " " << minute << " " << result << "\n";
}
将输入要写入文件的内容,并使用先前定义的fstream。
我尝试将fstream添加到函数的输入但是不起作用:
void WriteToFile(std::ofstream fstream, unsigned int count, WORD hour, WORD minute, unsigned char result);
在error C2248
给出了VC\include\fstream(803) : cannot access private member declared in class 'std::basic_ios<_Elem, _Traits>'
。
有人可以建议一个解决方案,以显示我不明白该怎么做吗?
答案 0 :(得分:1)
你说这个函数被声明为
void WriteToFile(std::ofstream& fstream, unsigned int count, WORD hour, WORD minute, unsigned char result);
// ^
// Note ampersand here
这有一个问题,因为您尝试按值传递流,这意味着它会被复制。并且您无法复制流对象。
通过引用传递:
std::ostream
在不相关的说明中,为了使其与其他流更兼容,我建议您改用基类void WriteToFile(std::ostream& ostream, unsigned int count, WORD hour, WORD minute, unsigned char result);
:
std::cout
现在你可以传递任何类型的输出流(文件,字符串,stepX
),它会起作用。
答案 1 :(得分:0)
我无法添加评论(声誉......),公平地说,我不太了解您的需求,您的问题是什么,所以只需对代码进行一些评论你已经分享了(希望这有点帮助):
1)
CString filename;
filename = ...
Would be much prettier like this:
CString filename = ...
(编译器无论如何都要照顾这个,但仍然)
2)这里有一个拼写错误: specifyNaneOfFile 我想这应该是 specifyNameOfFile
3)在你的功能签名中:
void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char result);
&#39;导致&#39;不参考。如果写成功(我为什么不bool WriteToFile?),我想你希望这给调用者一些信息。这样,无论你设置什么结果&#39;在你的功能中,它只会影响你的功能,调用者会得到它给出的功能。 即: 让我们假设这是你的功能:
void MyClass::WriteToFile(unsigned char result)
{
result = 1;
}
来电者称之为:
unsigned char writeResult = 0;
WriteToFile(writeResult)
if (writeResult == 1) ...
writeResult将保持为0。
如果您想要更改,请传递参考,如下所示:
void WriteToFile(unsigned int count, WORD hour, WORD minute, unsigned char &result);
另外,使用&#39; const&#39;对于您不打算改变的每个参数。