2012-03-07 16 views
5

Tôi gặp lỗi trong đoạn mã sau nó hoạt động tốt trong studio trực quan nhưng một khi tôi đã chuyển nó sang Xcode sử dụng gcc để biên dịch nhận lỗi này Không có hàm tạo phù hợp cho khởi tạo của 'ifstream' tôi đã xem xét việc thêm này như là một tài liệu tham khảo chứ không phải là một bản sao như được đề xuất trên trang web này nhưng nó vẫn đưa ra lỗi.Không có hàm tạo nào phù hợp để khởi tạo 'ifstream'

void getAndSetTextData::GetBannedList(string fileName) 
{ 
    bannedWordCount = 0; 
    ifstream inFile(fileName); 
    while(inFile >> currentWord) 
    { 
     bannedWords.push_back(currentWord); 
     bannedWords[bannedWordCount++] = currentWord; 
    } 
    inFile.close(); 
} 

Mọi trợ giúp sẽ được đánh giá cao.

+0

Đối số của tôi chống lại việc sử dụng rõ ràng là đóng: http://codereview.stackexchange.com/a/544/507 Về cơ bản nếu bạn không quan tâm nếu có lỗi thì hãy để trình phá hủy làm điều đó. –

Trả lời

11

ifstream constructor chấp nhận một const char* như tên tập tin (trước C++ 11):

ifstream inFile(fileName.c_str()); 

Một constructor bổ sung mà chấp nhận một const std::string& như tên tập tin được thêm vào trong C++ 11.

Điểm nhỏ: xem xét thay đổi đối số string fileName thành const string& fileName để tránh sao chép không cần thiết fileName.

+0

Về thời gian cuối cùng họ quyết định thêm một hàm tạo có một chuỗi. :) – cHao

+0

Cảm ơn bạn đã làm việc ngay bây giờ. – bobthemac

+0

FileName có phải là một biến thực được định nghĩa trong chương trình của bạn hay là một biến mà người dùng đọc câu hỏi này được cho là điền vào với đường dẫn đầy đủ? Tôi hỏi vì trong chương trình của tôi, tôi đang sử dụng biến argv [1] để giữ đường dẫn, và .c_str() không * KHÔNG * làm việc với nó – MarcusJ

0

trước tiên bạn nên kiểm tra xem thời tiết có được mở hay không. ví dụ nếu không có quyền cận file hoặc bạn mở file trong mode write khi không đĩa đủ vv ... nên

ifstream inFile(fileName); 
if(! inFile) 
    return; 
while(inFile >> currentWord) 

và khoảng hỏi bạn bạn gồm fstream?

+0

Không thực sự nesacery. Nếu tệp không mở được chính xác thì vòng lặp sẽ không bao giờ được nhập. –