2012-07-05 36 views
1

我在創建ifstream時遇到了問題,該文件在編譯時未定義。下面的示例正常工作:用用戶生成的文件名創建ifstream?

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string file, word; 
    int count = 0; 

    cout << "Enter filename: "; 
    cin >> file; 
    ifstream in("thisFile.cpp"); 
    while(in >> word) 
     count++; 
    cout << "That file has " << count << " whitespace delimited words." << endl; 

} 

但如果我改線ifstream in("thisFile.cpp");ifstream in(file);我得到一個編譯錯誤。爲什麼是這樣?

+0

感謝所有快速反應。 c_str()做到了。我想我會選擇詹姆斯的答案,因爲它有最多的細節。 編輯:我猜詹姆斯認爲他已經有足夠的代表並刪除了他的答案。 – WhiteHotLoveTiger 2012-07-05 21:06:19

回答

4

文件流只需要C風格字符串的構造函數的參數,而不是C++字符串,一個疏忽在C++ 11更新中已更正的C++ 98標準中。如果你的編譯器不支持C++ 11的是,你可以通過簡單地調用c_str()獲得C風格字符指針出一個C++字符串打開從一個字符串名稱的文件:

ifstream in(file.c_str()); 
3

C++之前11 ifstream構造函數只有一個const char*不是一個字符串的文件名。

所以儘量ifstream in(file.c_str());代替

+0

+1擊敗我10秒,並提到C++ 03和C++ 11之間的區別。 – 2012-07-05 20:53:35

+0

期待許多相同的答案,這一個:) – jcoder 2012-07-05 20:54:29

2

您需要c_str法:在C++ 98

ifstream in(file.c_str());