C++ c++;

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())。

我想在我的项目中使用41个输出文件在上面写文本。首先创建一个字符串数组
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;
    }