2012-03-07 157 views
5

我在下面的代碼中發生錯誤,它在Visual Studio中正常工作,但是一旦我將它移動到使用gcc編譯的Xcode獲取此錯誤沒有用於初始化的匹配構造函數'ifstream'我已經看過添加這個作爲參考,而不是像本網站上建議的那樣複製,但它仍然出現了錯誤。沒有匹配的構造函數用於初始化'ifstream'

void getAndSetTextData::GetBannedList(string fileName) 
{ 
    bannedWordCount = 0; 
    ifstream inFile(fileName); 
    while(inFile >> currentWord) 
    { 
     bannedWords.push_back(currentWord); 
     bannedWords[bannedWordCount++] = currentWord; 
    } 
    inFile.close(); 
} 

任何幫助,將不勝感激。

+0

我反對顯式使用close的參數:http://codereview.stackexchange.com/a/544/507基本上,如果你不在乎是否有錯誤,那就讓析構函數去做。 – 2012-03-07 21:10:35

回答

11

ifstream構造函數接受一個const char*作爲文件名(現有C++ 11):

ifstream inFile(fileName.c_str()); 

接受一個const std::string&作爲文件名的溶液中加入在C++ 11的附加構造。

小問題:考慮將參數string fileName更改爲const string& fileName以避免不必要的副本fileName

+0

大概他們最終決定添加一個帶字符串的構造函數。 :) – cHao 2012-03-07 20:50:55

+0

謝謝你現在的作品。 – bobthemac 2012-03-08 11:21:49

+0

fileName是你的程序中定義的實際變量,還是它是一個變量,閱讀這個問題的用戶應該填寫完整路徑? 我問,因爲在我的程序中,我使用argv [1]變量來保存路徑,而.c_str()不*使用它* – MarcusJ 2014-09-05 12:00:05

0

首先你應該檢查天氣文件是否打開。例如,如果你沒有權限訪問該文件,或者如果您打開在寫文件操作時,有沒有足夠的磁盤空間,等等 所以

ifstream inFile(fileName); 
if(! inFile) 
    return; 
while(inFile >> currentWord) 

和你的問題,你是其中fstream?

+0

不是真正的nesacery。如果文件無法正確打開,那麼循環將永遠不會被輸入。 – 2012-03-07 21:04:48

相關問題