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

5
我在以下代码中遇到了错误,在Visual Studio中它工作正常,但是一旦我将它移植到使用gcc编译的Xcode上,就会出现以下错误:“没有匹配的构造函数来初始化'ifstream'”。我已经尝试按照这个网站上建议的方式将其添加为参考文献而不是副本,但仍然出现了错误。
void getAndSetTextData::GetBannedList(string fileName)
{
    bannedWordCount = 0;
    ifstream inFile(fileName);
    while(inFile >> currentWord)
    {
        bannedWords.push_back(currentWord);
        bannedWords[bannedWordCount++] = currentWord;
    }
    inFile.close();
}  

非常感谢您的帮助。


我反对显式使用close的论点:http://codereview.stackexchange.com/a/544/507。基本上,如果您不关心是否存在错误,则让析构函数处理它。 - Martin York
2个回答

11

ifstream 构造函数接受一个文件名的 const char* 形式(在 C++11 之前):

ifstream inFile(fileName.c_str());

C++11新增了一个接受const std::string&类型文件名的额外构造函数。

小细节:考虑将参数中的string fileName改为const string& fileName,以避免不必要的fileName拷贝。


终于他们决定添加一个接受字符串的构造函数了。 :) - cHao
fileName是你程序中实际定义的变量,还是用户阅读此问题时应该填写完整路径的变量?我之所以问这个问题,是因为在我的程序中,我使用argv [1]变量来保存路径,并且.c_str()不能与它一起使用。 - MarcusJ
1
@MarcusJ,它是 OP 代码中的一个参数,是 std::string 类型。argv[1] 是一个 char* - hmjd
当然,这就是为什么它不起作用!它不是一个字符串!感谢你的帮助,伙计。 - MarcusJ

1

首先,您应该检查文件是否已打开。例如,如果您没有访问文件的权限,或者在磁盘空间不足时以写模式打开文件等等...

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

关于你的问题,你是否包括了 fstream 库?


不是必要的。如果文件未能正确打开,那么循环根本就不会执行。 - Martin York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接