C++ c++;
我想在我的项目中使用41个输出文件在上面写文本。首先创建一个字符串数组C++ c++;,c++,arrays,ofstream,C++,Arrays,Ofstream,我想在我的项目中使用41个输出文件在上面写文本。首先创建一个字符串数组list来命名这些输出文件,然后我尝试定义一个流对象数组,并使用list来命名它们,但我得到了一个错误,即“outfile”不能用作函数。下面是我的代码: #包括 #包括 #包括 #包括 使用名称空间std; int main() { 字符串列表[41]; int i=1; 流量*流出文件=新的流量[41]; 对于(i=1;i您不能像这样调用构造函数。请尝试调用outFile[i].open(list[i].c_str())。
list
来命名这些输出文件,然后我尝试定义一个流对象数组,并使用list
来命名它们,但我得到了一个错误,即“outfile”不能用作函数。下面是我的代码:
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串列表[41];
int i=1;
流量*流出文件=新的流量[41];
对于(i=1;i您不能像这样调用构造函数。请尝试调用outFile[i].open(list[i].c_str())
。请注意“open”。请参阅下面的修复程序:
除非必须使用,否则不要使用new
(您泄漏了所有文件,并且没有正确地销毁它们会导致数据丢失;如果没有正确地关闭这些文件,可能不会刷新流,并且挂起的输出缓冲区将丢失)
使用正确的数组索引(从0开始!)
在流
的默认构造的上调用.open(…)
,以打开文件
建议:
- 我建议不要使用命名空间std;
(以下未更改)
我建议重用stringstream
。这是一个很好的实践
更喜欢使用C++风格的循环索引变量(for(int i=..
)。这可以防止i
的范围过大带来意外
事实上,与时并进,使用
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
排液口的流量[41];
stringstream sstm;
对于(int i=0;我很抱歉,但我无法理解您的评论是什么意思亲爱的izomorphius您的权利。我刚刚在这一行中编译了sehe的代码,结果出错。@sehe但outfile是一个动态的流数组。所以outfile[i]实际上是一个ofstream,而不是指向这样的指针。或者我遗漏了什么?Derp.我错了。当然,数组不存储指针。哎呀。很抱歉造成混淆。(@vahidzolf注意,我的答案仍然解决了关键问题,因为使用了new
,我在那里测试了我的解决方案)一些“次”字“谢谢”无法表达一个人的真实感受。这一次是其中一次!!!outFile[i]。open(sstm.str());应该是outFile[i]。open(sstm.str().c_str());@abhi不是如果你使用c++11,你可以在循环中使用_countof(outFile)而不是41。至少在MSVC中。@4LegsDrivenCat为什么不直接使用for(auto&o:outFile)cout第一个小问题:您不应该使用list,它是一个保留字std::list是一个著名的容器。其次,您需要使用say for(int i=0;i)对每个outFile成员调用open(string(“somefilename\u或\u path”))
#include <sstream>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
ofstream outFile[41];
stringstream sstm;
for (int i=0;i<41 ;i++)
{
sstm.str("");
sstm << "subnode" << i;
outFile[i].open(sstm.str());
}
for (auto& o:outFile)
cout << std::boolalpha << o.good() << endl;
}