Александр прав, я думаю. Подпись 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, но я у меня нет ссылки на это случайно.