C++ c++;密码
有人能告诉我我做错了什么吗?我得到了一个错误,说getline()未在此范围内声明………任何帮助都将不胜感激 对getline的调用没有匹配的函数(char**,size\u t*,FILE*&)C++ c++;密码,c++,C++,有人能告诉我我做错了什么吗?我得到了一个错误,说getline()未在此范围内声明………任何帮助都将不胜感激 对getline的调用没有匹配的函数(char**,size\u t*,FILE*&) #包括 #包括 #包括 使用名称空间std; char*s; int main(int argc,char*argv[]) { 文件*fd=fopen(“input.txt”,“r”); 如果(fd==NULL) { fputs(“无法打开input.txt\n”,stderr); 退出(退出失败);
#包括
#包括
#包括
使用名称空间std;
char*s;
int main(int argc,char*argv[])
{
文件*fd=fopen(“input.txt”,“r”);
如果(fd==NULL)
{
fputs(“无法打开input.txt\n”,stderr);
退出(退出失败);
}
尺寸长度=0;
阅读;
常量字符*备份;
while((read=getline(&s,&length,fd))>0)
{
备份=s;
如果(A()&&*s=='\n')
{
printf(“%sis在语言中\n”,备份);
}
其他的
{
fprintf(stderr,“%s不在语言\n中”,备份);
}
}
fclose(fd);
返回0;
}
>p>为了使用GETLIN跨平台方式,您需要使用C++风格代码。
#include <fstream>
#include <string>
using namespace std;
std::string s;
bool A() { return true; }
int main(int argc, char *argv[])
{
ifstream myfile("input.txt");
if(!myfile.is_open())
{
fprintf(stderr, "Unable to open input.txt\n");
return 1;
}
size_t length = 0;
size_t read;
std::string backup;
while (getline(myfile, s))
{
backup = s;
if (A() && s == "\n")
{
printf("%s is in the language\n", backup.c_str());
}
else
{
fprintf(stderr, "%s is not in the language\n", backup.c_str());
}
}
return 0;
}
#包括
#包括
使用名称空间std;
std::字符串s;
bool A(){return true;}
int main(int argc,char*argv[])
{
ifstream myfile(“input.txt”);
如果(!myfile.is_open())
{
fprintf(stderr,“无法打开input.txt\n”);
返回1;
}
尺寸长度=0;
尺寸不可读取;
std::字符串备份;
while(getline(myfile,s))
{
备份=s;
如果(A()&&s==“\n”)
{
printf(“%s”使用的语言为backup.c_str());
}
其他的
{
fprintf(stderr,“%s不是语言\n”,backup.c_str());
}
}
返回0;
}
您似乎对各种getline
函数签名有点困惑
标准C++签名为
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input,
std::basic_string<CharT,Traits,Allocator>& str,
CharT delim );
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
再次使用可选的分隔符
现在,在您的代码中传递参数,就像调用没有分隔符的posix版本一样。如果要使用标准参数,则必须更改参数(即istream
对象,而不是FILE*
)。我不知道POSIX是否对您可用,因为POSIX不同于任何C++标准。
<>注意,<代码> ft>代码> >代码>文件*>代码>代码> fPrtuff>代码>是C文件处理函数,不是C++的。 你想用<代码> GETLIN(和,长度,FD)< /C>做什么?您正在尝试使用Cgetline
假设您正确打开了文件,在C++中,您的<代码> GETLION>代码>应该是这样的:<代码> GETLIN(输入流,变量aboRealADIN,opdialDimimter)< /Calp>./P>
- 您没有包括
,但确实包括了
。可能使用ifstream fd(“input.txt”)代码>
- 什么是
A()
- 如果试图使用C
getline
,则使用命名空间std的可能会产生干扰
- 为什么要使用
printf
和fprintf
而不是couts
呢。。。哪里而且getline
不会声明自己。包含您的#将
列表与您的代码一起包含。我想你是想从POSIX LIBS中使用,对吗?我刚刚编辑了我的帖子,我希望你能从POSIX中问我<代码> GETLeIO/> >在<代码> STDIO。H/COD>中,你不包括(或者C++等价,<代码> CSTDIO < /COD>)。您可能需要使用适当的版本值声明_POSIX_C_SOURCE以将其声明拉入(200809L
或更高版本)。@WhozCraig仍然无法使用#包括while循环应该做什么?啊,看起来getline的stdio.h版本是GNU扩展,您必须使用另一个编译器(MSVC?)。您需要使用代码来使用GETLIN和STD::String的C++版本。我将纠正代码,使代码更简单。我会选择std::getline@JonAbraham此外,如果您在I/O方面遇到问题,您可能需要检查一个问题。我不知道你是怎么找到C函数而不是C++的。我猜我是在学硬的方法。我会根据建议来修改代码。你是从C迁移过来的吗?那么谁教你在C++程序中编写C风格代码呢?
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);