2014-01-26 105 views
-1

我看了幾個鏈接,如thisthis爲什麼我得到一個錯誤:沒有重載函數「getline」的實例與參數列表匹配嗎?

不幸的是,我只是一個程序員的新來弄明白。我想要具有以下行while(getline(getline(fin, line)),因爲我試圖從文件中讀取整行文本。然後我試圖弄清楚該文件中是否有類似的詞或數字。我在微軟的Visual Studio 2012

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

// main application entry point 
int main(int argc, char * argv[]) 
{ 
    string filename; 
    ifstream inFile; 

    // request the file name from the user 
    cout << "Please enter a filename: "; 

    // stores the users response in the string called filename 
    cin >> (std::cin, filename); 

    // opens the file 
    inFile.open(filename.c_str()); 

    // if the file doesn't open 
    if (!inFile) 
    { 
     cout << "Unable to open file: " << filename << endl; 

     return -1; 

    } // end of if(!inFile) 

    // while(getline(getline(fin, line)) gives me the same error 
    while (getline()) 
    {} 

    // close the file 
    inFile.close(); 

} // end of int main(int argc, char* argv[]) 
+1

只是好奇:你認爲'cin >>(std :: cin,filename)'做了什麼? – 0x499602D2

+0

我認爲它確實如此: //將用戶的響應存儲在名爲文件名 的字符串中,但在您發表評論之後,看起來我完全錯了。 – user26093

+0

不,你說得對,它只是在以不必要的方式來做這件事。 '(std :: cin,filename)'與'filename'相同,因爲逗號運算符'''返回最右邊的操作數。你真正需要的是'std :: cin >> filename'。 – 0x499602D2

回答

0

why am I getting a error: no instance of an overloaded function 「getline」 matches the argument list here?

寫這因爲你叫std::getline()不帶任何參數,而std::getline()確實需要的參數:

while(getline()) 
{ 
} 

std::getline()需要什麼,但是,是

  1. an stream&(其中輸入來自)
  2. 一個std::string&(其中輸入結束)
  3. 任選一個char(定界符,默認是'\n'

像這樣應該做的:

std::string line; 
while(std::getline(inFile, line)) { 
    // process line 
} 

請注意,您的代碼相當混亂。讓我們通過它:既然你不使用argcargv

int main(int argc, char * argv[]) 

,爲什麼通過他們?你的編譯器應該警告你它們沒有被使用 - 這只是噪聲,可能會讓你感到分心,因爲它可能會導致真正的問題。改爲:

int main() 

並且警告消失。

string filename; 
ifstream inFile; 

爲什麼在函數的頂部定義這些函數,當它們只用在更遠處?在C++中,儘可能晚地定義對象被認爲是一種很好的風格,最好是當它們可以被初始化時。

using namespace std; 

這是一個壞主意,might hurt you badly。只是不要這樣做。

cin >> (std::cin, filename); 

我不知道這是應該做的,更別說什麼它實際上確實,假設它編譯。相反,你想要的是:std::cin >> filename。但請注意,這可以防止包含空格的文件名。如果這是一個問題,請改爲使用std::getline()

inFile.open(filename.c_str()); 

這是​​應該被定義爲:

std::ifstream inFile(filename.c_str()); 

最後,你的文件

inFile.close(); 

明確的結束是不必要的。無論如何,std::ifstream的析構者會照顧到這一點。

+0

當我這樣做時,仍然出現錯誤: while(getline(fin,line)) {} – user26093

+0

@ user26093我認爲您向我們展示的代碼**不是**您實際擁有的代碼....向我們展示您實際擁有的代碼。 – 0x499602D2

+0

@ user26093'getline(fin,line))'?什麼是「鰭」? – jfly

相關問題