C++ c++;密码

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); 退出(退出失败);

有人能告诉我我做错了什么吗?我得到了一个错误,说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);
退出(退出失败);
}
尺寸长度=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>做什么?您正在尝试使用C
getline

假设您正确打开了文件,在C++中,您的<代码> GETLION>代码>应该是这样的:<代码> GETLIN(输入流,变量aboRealADIN,opdialDimimter)< /Calp>./P>

  • 您没有包括
    ,但确实包括了
    。可能使用
    ifstream fd(“input.txt”)
  • 什么是
    A()
  • 如果试图使用C
    getline
    ,则使用命名空间std的
    可能会产生干扰

  • 为什么要使用
    printf
    fprintf
    而不是
    cout
    s
    呢。。。哪里而且
    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);