2013-01-31 47 views
2

我的代碼:C++:#included <fstream>但不能使用getline?

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 
. 
. 
. 

void function() { 
    ofstream inputFile; 
    . 
    . 
    . 
    inputFile.getline (inputFile, inputField1, ","); 
} 

出於某種原因,我無法弄清楚,編譯這個使用G ++也返回

error: ‘struct std::ofstream’ has no member named ‘getline’ 

,作爲一個側面說明,它也產生錯誤

error: invalid conversion from ‘void*’ to ‘char**’ 
error: cannot convert ‘std::string’ to ‘size_t*’ for argument ‘2’ to ‘ssize_t getline(char**, size_t*, FILE*)’ 

但我認爲我得到了錯誤的方式或什麼的參數。

任何人都可以幫助擺脫任何光線?

+0

似乎有成爲多個問題:'ofstream'用於輸入,你似乎在試圖讀入'的std :: string'(因而成員函數'getline'在'istream'不會工作要麼......)Google for'getline'並找到需要'std :: string'的免費函數 –

回答

1

一個ofstream是一個輸出流,所以它沒有任何輸入方法。您可能需要ifstream

void function() { 
    ifstream inputFile("somefilename"); 
    char buf[SOME_SIZE]; 
    inputFile.getline (buf, sizeof buf, ','); 
} 
2

ofstream是輸出文件流。你需要一個ifstream。

3

有兩個在C++中使用分隔符的getline函數。

一個是ifstream的:

istream& getline (char* s, streamsize n, char delim); 

另一種是字符串:

istream& getline (istream& is, string& str, char delim); 

似乎從你的榜樣,你正期待從字符串中的一個的使用。

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

int main() { 
    ifstream inputFile; 
    string inputField1; 

    inputFile.open("hi.txt"); 

    getline(inputFile, inputField1, ','); 

    cout << "String is " << inputField1 << endl; 

    int field1; 
    stringstream ss; 
    ss << inputField1; 
    ss >> field1; 

    cout << "Integer is " << field1 << endl; 

    inputFile.close(); 

} 
+0

我的程序中inputField1的類型是int。這是否以同樣的方式工作? – midnightBlue

+0

如何指定要使用哪個ifstream或字符串? – midnightBlue

+0

上面的程序將第一個字段讀入一個字符串。要將其轉換爲整數,請使用stringstream。要使用ifstream的getline,請參閱下面的Carl Norum的代碼。注意它使用了inputFile.getline(),而不僅僅是getline()。它期望的領域類型是不同的。從字符串getline讀取到一個字符串,它是動態分配的。如果您事先不知道您正在閱讀的字段的最大長度,這很有用。 ifstream getline只能讀取預先分配的緩衝區大小。 –