2016-05-17 224 views
0

我试图将infeasible导出为文本文件,但代码不会编译时出现以下语法错误: 调用'(std :: list )(std :: list :: iterator &)'|C++:将列表容器中存储的数据输出到文本文件

list<solution> feasible, infeasible; 

    for(list<solution>::iterator it = merged.begin(); it != merged.end(); it++) { 
     mutation(*it, input); 
     if(it->feasible) 
      feasible.push_front(*it); 
     else { 
      infeasible.push_front(*it); 
      ofstream outfile; 
      outfile.open("output.txt"); 
      for(list<solution>::iterator it2 = infeasible.begin(); it2 != infeasible.end(); it2++) 
       outfile<<infeasible(*it2)<<std::endl; 
      } 
     } 
+2

你会得到什么错误信息? –

+0

请提供[MCVE]。 –

+0

每当你发现某些事情不可行时,你似乎都会重新从头开始编写文件。那是故意的吗?为什么? –

回答

0

初步备注:merged每一个项目,你写的具有相同名称的新文件,覆盖前一个。如果你想避免这种情况,总是新的输出添加到同一文件的末尾,使用:

 outfile.open("output.txt", ios::app); 

假设solution包含至少一个成员feasible,该功能mutation()正确定义,即mergedlist<solution>并且您已经定义为solution插入器:

ostream& operator<< (ostream& os, const solution &s) { 
    return os<<"??"; //t.b.d. 
} 

然后你可能会略有不同的代码到m编辑它:

for(auto it = merged.begin(); it != merged.end(); it++) { 
     mutation(*it, input); 
     if(it->feasible) 
      feasible.push_front(*it); 
     else { 
      infeasible.push_front(*it); 
      ofstream outfile; 
      outfile.open("output.txt", ios::app); 
      for(auto it2 = infeasible.begin(); it2 != infeasible.end(); it2++) 
       outfile<<*it2<<std::endl; // use directly *it2 
     } 
    } 
+0

它编译,但我似乎无法分配一个值“os”被写入文件output.txt。目前,它正在打印“??”如预期。 – Far

相关问题