2013-02-05 27 views
3

我想讓我的程序在與主函數不同的函數中寫入,而且我遇到了很多麻煩。下面是我的程序的簡化版本:如何在單獨的函數中寫入文件

#include <iostream> 
#include <fstream> 
using namespace std; 

void writeToFile(int x) 
{ 
    outputFile << x << endl; 
} 

int main() 
{ 
ofstream outputFile; 
outputFile.open("program3data.txt"); 
for (int i = 0; i < 10; i++) 
{ 
    writeToFile(i); 
} 
outputFile.close(); 
return 0; 
} 
+0

想象一下,如果在任何地方創建的每個變量都可用,那麼在非常大的程序中會發生什麼情況。由於相互衝突的名稱,添加任何東西都會帶來巨大的風險。即使是較小的程序也必須知道它們使用的標題(標準或不標準)中創建的所有變量。 – chris

+1

這不會編譯,因爲outputFile不在writeTofile()的範圍內。將它放在一個類中,將其作爲參數傳遞,或者(使其成爲全局的)。 –

回答

5

writeToFile函數試圖使用outputFile變量,它是在不同的範圍。您可以將輸出流傳遞給函數,並且應該可以工作。

#include <iostream> 
#include <fstream> 
using namespace std; 

void writeToFile(ofstream &outputFile, int x) 
{ 
    outputFile << x << endl; 
} 

int main() 
{ 
    ofstream outputFile; 
    outputFile.open("program3data.txt"); 
    for (int i = 0; i < 10; i++) 
    { 
     writeToFile(outputFile, i); 
    } 
    outputFile.close(); 
    return 0; 
} 
1

您需要使您的子功能知道outputFile。正如所寫,該變量只存在於「main」函數中。您可以將函數簽名改爲:

void writeToFile(int x, ofstream of) 

,並調用它像:

writeToFile(i, outputFile); 

這將變量傳遞給子功能,以便它可以在該範圍內使用爲好。

+1

請注意,流不可複製;使用'ofstream&of' – mythagel

相關問題