Нет подходящего конструктора для инициализации 'ifstream' - PullRequest
5 голосов
/ 08 марта 2012

Я получаю сообщение об ошибке в следующем коде, он отлично работал в Visual Studio, но как только я переместил его в Xcode, который использует gcc для компиляции, получаю эту ошибку.это как ссылка, а не копия, как предложено на этом сайте, но все равно возникла ошибка.

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

Любая помощь будет оценена.

Ответы [ 2 ]

11 голосов
/ 08 марта 2012

ifstream конструктор принимает const char* в качестве имени файла (ранее C ++ 11):

ifstream inFile(fileName.c_str());

Дополнительный конструктор, который принимает const std::string& в качестве имени файла, был добавлен в C ++ 11.

Незначительная точка: рассмотрите возможность изменения аргумента string fileName на const string& fileName, чтобы избежать ненужной копии fileName.

0 голосов
/ 08 марта 2012

Сначала вы должны проверить, открыт файл или нет.например, если у вас нет разрешения на доступ к файлу или если вы открываете файл в режиме записи, когда на диске недостаточно места и т. д. ... так что

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

и по вашему вопросу вывключая фстрим?

...