2016-09-14 3 views
-2

Нужна помощь в исправлении моего кода, не знаю, что не так. Я использую C++ 11, пытаясь записать вектор в файл, индивидуально записывая каждую структуру. Раздел кода возврата ошибки является:Ошибка возврата из потока "Нет соответствующей функции для вызова std :: basic_ofstream <char> :: close (const char [14])"

string craigSave = "craigSave.txt"; 
ofstream file(craigSave.c_str()); 
file.open("craigSave.txt"); 
for (int i=0; i<finalVector.size(); i++){ 
    file << finalVector[i]<<endl; 
} 
file.close("craigSave.txt"); 
cout<<"Thanks for shopping!"<<endl; 
done = true; 

Ошибка на линии «file.close» и:

error: no matching function for call to 'std::basic_ofstream::close(const char [14])'

я исследую на эту ошибку, кажется, указывают на необходимости использовать char * как аргумент вместо строки, но я использую C++ 11, поэтому он должен принимать строки. Также странно, что нет ошибки для строки file.open, так как все исследования показывают, что ошибка находится там, а не в файле .close

+2

'close' не принимает никаких параметров. Где вы проводите исследования? (Где бы это ни было, идите [здесь] (http://en.cppreference.com/w/).) – molbdnilo

+0

Конструктор открыл файл. Нет необходимости в вызове 'file.open()'. Деструктор закроет файл; нет необходимости в вызове 'file.close()'. –

ответ

3

Просто используйте file.close();, вам не нужно снова передавать имя файла.

См. http://www.cplusplus.com/reference/fstream/ofstream/close/.

Кроме того, ofstream s объекты RAII, что означает, что файл будет автоматически закрыт после того, как ofstream объект выходит из области видимости (см do I need to close a std::fstream?):

{ 
    ofstream out("name"); 
    // do something with out... 
} // out.close is called automatically 
+1

Еще лучше, удалите линию в целом. – AndyG

+0

Верно, я расширю ответ. Благодаря! – rainer

+0

Спасибо! Последующий вопрос, так как я не указал местоположение для этого файла, где он его ищет? В той же папке, что и сам .cpp?> –

Смежные вопросы