2016-05-17 31 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

相關問題