2013-04-02 23 views
5

Tôi thực sự cần sự giúp đỡ của bạn. Có vẻ như tôi không thể thực hiện thao tác tập tin trong C++. Tôi đã sử dụng fstream để thực hiện một số thao tác tệp nhưng khi biên dịch nó, một lỗi xuất hiện có nội dung:lỗi fstream trong C++

|63|error: no matching function for call to 'std::basic_fstream<char>::open(std::string&, const openmode&)'| 

Tôi đã làm gì sai?

Đây là một phần của mã nguồn:

#include<stdio.h> 
#include<iostream> 
#include<fstream> 
#include<string>  

using namespace std; 

inline int exports() 
{ 
string fdir; 
// Export Tiled Map 
cout << "File to export (include the directory of the file): "; 
cin >> fdir; 
fstream fp; // File for the map 
fp.open(fdir, ios::app); 
if (!fp.is_open()) 
    cerr << "File not found. Check the file a file manager if it exists."; 
else 
{ 
    string creator, map_name, date; 
    cout << "Creator's name: "; 
    cin >> creator; 
    cout << "\nMap name: "; 
    cin >> map_name; 
    cout << "\nDate map Created: "; 
    cin >> date; 
    fp << "<tresmarck valid='true' creator='"+ creator +"' map='"+ map_name +"' date='"+ date +"'></tresmarck>" << endl; 
    fp.close(); 
    cout << "\nCongratulations! You just made your map. Now send it over to [email protected] for proper signing. We will also ask you questions. Thank you."; 
} 
return 0; 
} 

Trả lời

6

Các fstream::open() chấp nhận std::string loại như tên tập tin được thêm vào trong C++ 11. Hoặc là biên dịch với -std=c++11 cờ hoặc sử dụng đối số fdir.c_str() làm đối số (để vượt qua const char* thay thế).

Lưu ý rằng các nhà xây dựng fstream() có thể mở các tập tin nếu được cung cấp với tên tập tin, mà sẽ loại bỏ các cuộc gọi đến fp.open():

if (std::cin >> fdir) 
{ 
    std::fstream fp(fdir, std::ios::app); // c++11 
    // std::fstream fp(fdir.c_str(), std::ios::app); // c++03 (and c++11). 
    if (!fp.is_open()) 
    { 
    } 
    else 
    { 
    } 
} 
+0

Cảm ơn rất nhiều hmjd! Điều này làm việc. Tôi đoán tôi đã không biên dịch nó cho C++ 11. –

4

Bạn cần phải bật C++ 11 chế độ cho std::basic_fstream<char>::open(std::string&, const openmode&) quá tải để có sẵn .

đèo một trong những để gcc:

-std=c++11 hoặc -std=c++0x

Trước C++ 11, istream::open chức năng mất chỉ C-chuỗi. (Bạn có thể gọi nó bằng cách nói fp.open(fdir.c_str(), ios::app);)

+0

Cảm ơn jrok, điều này cũng giúp tôi rất nhiều ngoài các câu trả lời của hmjd. :) –

Các vấn đề liên quan