c++ - 使用 getline 获取字符串对象

标签 c++ string getline

我正在尝试使用 getline 将用户输入直接从控制台获取到 C++ 字符串对象中。然而,我没有这样做,因为编译器给我以下错误。

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;
 }   

最佳答案

这是原因:

f2.getline(f2,line2);

应该是:

getline(f2,line2);

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

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

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

关于c++ - 使用 getline 获取字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760010/

相关文章:

c++ - 使用 Qt 检查字符串是否是有效的文件名

c++ - C++ 代码的符号表是否包含函数名和类名?

c++ - 采用 "pass by reference"值的递归函数的包装函数

c++ - 在多台计算机上同步相同的代码块文件

string - 计算 R 中单词出现的次数

c++ - 将 char 指针中的字符替换为 memmove

python - 如何准备一个包含整数、 float 和字符串的列表?

c++ - 为什么第二个字符丢失了第二个变量

c - 如何将整行插入到c中的节点中?

c++ - 编译器无法识别 Getline