2013-11-28 49 views
0

我想從文件中讀取數字,並且遇到getline問題。我有下面的代碼,我會後的事項部分:從文件中讀取時無法使用getline

的main.cpp

int main() { 
    GrafNoEtiquetat Graf; 
    ifstream f_ent; 
    ofstream f_sort; 
    string str; 

    cout << "Introdueix el nom del fitxer a llegir." << endl; 
    cin >> str; 
    char *cstr=new char[str.size()+1]; 
    strcpy(cstr, str.c_str()); 
    f_ent.open(cstr); 
    if(f_ent.fail()) cerr << "El fitxer no s'ha pogut obrir." << endl; 
    else { 
     Graf(cstr); 
     unidireccional(Graf); 
     delete [] cstr; 
     cout << "Introdueix el nom del fitxer de surtida" << endl; 
     cstr = new char [str.size()+1]; 
     strcpy(cstr, str.c_str()); 
     f_sort.open(cstr); 
     if(f_sort.fail()) cerr << "El fitxer no s'ha creat." << endl; 
     else Graf.escriureGraf(f_sort); 
    } 
    return 0; 
} 

這裏是使用爲const char * CSTR創建格拉芙功能:

GrafNoEtiquetat::GrafNoEtiquetat(const char * cstr) { 
    char c[1000]; 
    int n1, n2; 
    cstr.getline(c,80); 
    while(c!="#") { 
     nNodes++; 
     cstr.getline(c,80); 
    } 
    arestes.resize(nNodes+1); 
    while(!cstr.eof()) { 
     cstr >> n1; 
     cstr >> n2; 
     afegirAresta(n1, n2); 
    } 
    cstr.close(); 
} 

當我讀取n1和n2以及當我想關閉文件時,我在所有行中使用'cstr',getline,cstr.eof()時出現錯誤。 的錯誤是類似以下內容:

error: request for member 'getline' in 'cstr', which is of non-class type 'const char*' 

我不知道爲什麼會出現這種情況,任何線索?

回答

3

該錯誤消息說,無辜的問題是什麼。沒有getline方法,它將是const char*的成員。

您將cstr定義爲const char * cstr,然後嘗試對其調用getlinecstr.getline(c,80);。您應該使用它來讀取istream,而不是中的一組字符。

如果你想要做你的方式,這樣做如下:

GrafNoEtiquetat::GrafNoEtiquetat(const char * cstr) { 
    ifstream inputFile(cstr); 
    char c[1000]; 
    int n1, n2; 
    inputFile.getline(c,80); 
    while(c!="#") { 
     nNodes++; 
     inputFile.getline(c,80); 
    } 
    arestes.resize(nNodes+1); 
    while(!inputFile.eof()) { 
     inputFile >> n1; 
     inputFile >> n2; 
     afegirAresta(n1, n2); 
    } 
    inputFile.close(); 
} 

而且你還要檢查文件是否被正確地公開。要做到這一點使用ifstream::is_open

+0

謝謝,它的工作! –