C++ 使用参数字符串或字符为ifstream设置std::getline*

C++ 使用参数字符串或字符为ifstream设置std::getline*,c++,string,C++,String,我正在使用fstream读取或写入文件 我遇到了一个有关函数ifstream::getline的问题。当我包含时,我可以将字符串作为参数传递给函数,如果没有,我必须将char*作为参数传递。有人能告诉我为什么吗 根据函数的描述,据我所知,正确的参数应该是char*。string值是否在此处转换为char*?字符串类型未转换为char*。这就是.c_str()存在的原因。但是std::string类型将接受一个char*作为初始值设定项 这两种类型不向后兼容std::string将接受char*

我正在使用
fstream
读取或写入文件

我遇到了一个有关函数
ifstream::getline
的问题。当我包含
时,我可以将字符串作为参数传递给函数,如果没有,我必须将
char*
作为参数传递。有人能告诉我为什么吗


根据函数的描述,据我所知,正确的参数应该是
char*
string
值是否在此处转换为
char*

字符串类型未转换为
char*
。这就是
.c_str()
存在的原因。但是std::string类型将接受一个
char*
作为初始值设定项


这两种类型不向后兼容
std::string
将接受
char*
,但
char*
不接受
std::string

字符串类型未转换为
char*
。这就是
.c_str()
存在的原因。但是std::string类型将接受一个
char*
作为初始值设定项


这两种类型不向后兼容
std::string
将接受
char*
,但
char*
不接受
std::string

有两个版本的
std::getline()

std::istream::getline(char*,char='\n');//istream的成员函数
std::getline(std::istream&,std::string&,char='\n');//自由函数

当包含
std::istream
的定义时,显然会得到成员函数。但是,您需要包含
以获得
std::string
的定义,该定义也随其版本
std::getline()

有两个版本的
std::getline()

std::istream::getline(char*,char='\n');//istream的成员函数
std::getline(std::istream&,std::string&,char='\n');//自由函数

当包含
std::istream
的定义时,显然会得到成员函数。但是,您需要包含
来获得
std::string
的定义,它的版本
std::getline()

如果不包含
,编译器甚至不知道有
getline
函数。。。只接受一个
std::string
作为参数。对不起,我的意思是ifstream::getlineYou谈论的是两件不同的事情。
getline
成员函数和
附带的
getline
免费函数。没有转换或任何东西。它们是不同的东西,只是碰巧有相同的名称和相似的功能。是的,你是对的。我搞错了,我不知道std包含函数,我想在ifstream中请求成员函数。如果你没有
#include
,那么编译器甚至不知道有一个
getline
函数。。。只接受一个
std::string
作为参数。对不起,我的意思是ifstream::getlineYou谈论的是两件不同的事情。
getline
成员函数和
附带的
getline
免费函数。没有转换或任何东西。它们是不同的东西,只是碰巧有相同的名称和相似的功能。是的,你是对的。我搞错了,我不知道std包含函数,我想在ifstream中请求成员函数。OP询问的是ifstream而不是istream@chbchb55:
std::ifstream
未声明
getline()
成员函数。但是,它的基类std::istream
确实如此。您是对的,但您至少可以发布如何将ifstream转换为istream以使用getline,尽管这是一件容易的事情,如果你更新了你的答案,它将正确地回答OP的问题OP问的是关于ifstream的,而不是istream@chbchb55:
std::ifstream
未声明
getline()
成员函数。但是,它的基类std::istream确实如此。您是对的,但您至少可以发布如何将ifstream转换为istream以使用getline,尽管这是一件容易的事情,如果您更新了答案,它将正确地回答OP的问题
std::istream::getline(char*, char = '\n'); // member function of istream
std::getline(std::istream&, std::string&, char = '\n'); // free function in <string>