没有匹配的构造函数用于初始化'ifstream'

问题描述:

我在下面的代码中发生错误,它在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

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

首先你应该检查天气文件是否打开。例如,如果你没有权限访问该文件,或者如果您打开在写文件操作时,有没有足够的磁盘空间,等等 所以

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

和你的问题,你是其中fstream?

+0

不是真正的nesacery。如果文件无法正确打开,那么循环将永远不会被输入。 – 2012-03-07 21:04:48