2015-03-09 3 views
0

Я пытаюсь, чтобы пользователь вводил путь к файлу файла, который должен быть прочитан моей программой. Однако, когда я пытаюсь скомпилировать код, это ошибки со следующей ошибкой: никакой подходящей функции для вызова «std :: basic_ifstream :: open (std :: string &)». Код работает правильно, без ошибок, когда я непосредственно вхожу в файл вместо использования getline или cin. Я не знаю, в чем проблема. Какие-либо предложения?Имя пути к файлу и ввод пользователя

int main() 
{ 
ifstream input_file; 
string file_name; 
cout<< "Please input file path to PostFix arithmetic expressions file\n"; 
getline(cin, file_name); 
input_file.open(file_name); 
read_and_evaluate(input_file); 
} 
+2

Вы можете упростить этот пример, используя 'string file_name =" foo "', и вы можете найти ответ, просмотрев документацию 'ifstream :: open' (например, google" ifstream "). – Beta

+0

Ошибка означает, что она говорит. Нет перегрузки 'open', который совместим с аргументом' std :: string' (по крайней мере до C++ 11). – chris

+0

Еще один намек: вы можете также искать функции-члены 'std :: string'. – Beta

ответ

0

Вы должны скомпилировать в C++ 11 для того, чтобы получить ifstream конструктор или open члена функцию, которая принимает аргумент std::string. С g ++ используйте опцию -std=c++11.

В C++ 03 Конструкторы iostream поддерживают только строки C, которые вы можете получить через std::string::c_str().

Обратите внимание, что независимо от строки C или std::string, в Windows это не приведет к открытию файла с символами, отличными от ANSI в пути, если только вы не сократите путь до элементов пути DOS 8.3 (которые являются чистыми ASCII).