2012-10-06 51 views
1

我想直接从控制台使用getline将用户输入转换为C++字符串对象。然而,我却没有这样做,因为编译器给了我下面的错误。使用getline取得字符串对象

main.cpp: In function ‘int main(int, char**)’: 
main.cpp:52:28: error: no matching function for call to ‘std::basic_ifstream<char>::getline(std::ifstream&, std::string&)’ 
main.cpp:52:28: note: candidates are: 
/usr/include/c++/4.6/istream:599:5: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::getline(std::basic_istream<_CharT, _Traits>::char_type*, std::streamsize, std::basic_istream<_CharT, _Traits>::char_type) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::char_type = char, std::streamsize = int] 
/usr/include/c++/4.6/istream:599:5: note: candidate expects 3 arguments, 2 provided 
/usr/include/c++/4.6/istream:408:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::getline(std::basic_istream<_CharT, _Traits>::char_type*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_CharT, _Traits>::char_type = char, std::streamsize = int] 
/usr/include/c++/4.6/istream:408:7: note: no known conversion for argument 2 from ‘std::string {aka std::basic_string<char>}’ to ‘int’ 

这里是源代码:

#include <iostream> 
#include <fstream> 
#include <cmath> 
#include <cstdlib> 
#include <cstring> 
#include <string> 
#include <map> 
#include <set> 
#include <algorithm> 
#include <cstdio> 

#define MAX_LIN 1024 

using namespace std; 

typedef set<int> si; 
int main(int argc, char** argv) 
{ 
    string line1; 
    string line2; 

    map <string , si > iMap; 

    if (argc != 3) { 
     fprintf(stderr,"Usage: a.out <file1> <file2>\n"); 
    } 

    ifstream f1,f2; 

    f1.open(argv[1],ifstream::in); 
    f2.open(argv[2],ifstream::in); 

    while(!f1.eof()) { 
     getline(f1,line1); 
     mParse(line1); 
    } 

    while(!f2.eof()) { 
     f2.getline(f2,line2); 
     mParse(line2); 
    } 

    f1.close(); 
    f2.close(); 


    return 0; 
} 
+0

你有没有'#include '?请将您的include指令添加到发布的代码中,我没有看到任何代码。 – hmjd

+0

您是否在头文件中完成了#include ? –

+0

是的,我完成了两个。让我包括整个标题。 – hytriutucx

回答

6

这是原因:

f2.getline(f2,line2); 

应该是:

getline(f2,line2); 

有一个std::ifstream::getline()但它接受不同参数。

请注意while循环的结构不正确,因为应在读取操作后立即检查eof()。编码循环的一种常见方法是:

while (getline(f2, line2)) 
{ 
    mParse(line2); 
} 
0

这里是正规途径:

std::ifstream f1(argv[1]); 
std::ifstream f2(argv[2]); 

for (std::string line; std::getline(f1, line);) 
{ 
    mparse(line); 
} 

for (std::string line; std::getline(f2, line);) 
{ 
    mparse(line); 
} 

说明一切,我们写,每个应被视为资本罪:eofopencloseifstream::inreturn 0