Я не могу открыть имя переменной файла - PullRequest
0 голосов
/ 06 ноября 2010

Есть ли причина, по которой Dev C++ не позволяет мне делать file.open(file_name_variable)?Я не понимаю, почему он не позволяет мне открывать что-либо, кроме жестко закодированного имени, например file.open("abc.txt"), как обойти это?Не используете Dev C ++?

Вот в основном то, что у меня есть:

int open_file(string file_name){
    ifstream file;
    file.open(file_name);
    if (!file.is_open()){
        return 0;       
    }
    return 1;
}

Ответы [ 3 ]

6 голосов
/ 06 ноября 2010

Вам нужно передать его к-струной. Использование:

file.open( file_name.c_str() );

В C ++ 11 это больше не нужно. Была добавлена ​​подпись, которая занимает std::string.

1 голос
/ 06 ноября 2010

fstream::open требует const char * в качестве первого аргумента.

void open ( const char * filename,
        ios_base::openmode mode = ios_base::in | ios_base::out );

Это не займет std::string (к сожалению, стыдно).
Вам необходимо преобразоватьstd::string до const char *

file.open(file_name.c_str())
0 голосов
/ 06 ноября 2010

Александр прав, я думаю. Подпись open:

void open (const char * filename, ios_base :: openmode mode);

Вы пытаетесь передать std :: string в качестве const char *, но std :: string не имеет оператора const char * (по соображениям безопасности). Вместо этого вы должны использовать метод c_str (). Проблема не в том, что неявное преобразование в const char * должно быть доступно, а в том, что basic_ifstream должен иметь открытую перегрузку, которая принимает строку - насколько мне известно, это добавляется в C ++ 0x, но я у меня нет ссылки на это случайно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...