error: no matching function for call to 'getline(FILE*&, std::string&)'

error: no matching function for call to 'getline(FILE*&, std::string&)'

错误:没有匹配函数来调用 'getline(FILE*&, std::string&)' 函数代码:

void CarregarArquivo(){
aluno alunos_auxiliar[MAX];
FILE *arquivo;
arquivo=fopen ("texto.txt","r");
int quantidade=0;
fscanf(arquivo,"%d",&quantidade);
if(quantidade!=0){
    quantusuario=quantidade;
    for(int i=0;i<quantidade;i++){
        getline(arquivo,alunos[i].nome);
        fscanf(arquivo,"%d",&alunos[i].matricula);
        printf("%d",alunos[i].matricula);
        fscanf(arquivo,"%d/%d/%d",&alunos[i].nascimento.dia,&alunos[i].nascimento.mes,&alunos[i].nascimento.ano);
        if(alunos[i].numero!=0){
            for(int j=0;j<alunos[i].numero;j++){
                getline(arquivo,alunos[i].materias[j].nome);
                fscanf(arquivo,"%.1f",&alunos[i].materias[j].nota);
            }
        }
    }
}
else if(quantidade == 0 && arquivo == NULL){
    quantusuario =0;
}
fclose(arquivo);

}

包括:

registro.h 里面有结构:

struct aluno{
string nome;
int numero;
int matricula;
data nascimento;
disciplina materias[10];

};

包括:

#include"registros.h"
#define MAX 100
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include"funcoes.h"
#include <fstream>
#include<string>

Getline 请工作。

我是Brazilian.Ignore变量名。对不起我的英语。

您混淆了 C 库的 FILE * 函数和使用 std::istream.

的 C++ 库函数

您需要重写代码并将 FILE * 的所有用法替换为 std::ifstream.

,包括 fopen()

std::getline 的第一个参数是 std::istream &,而不是 FILE *

我认为您混淆了 C 和 C++ API。在 C++ 中,这是函数:

http://www.cplusplus.com/reference/string/string/getline/

std::getline(std::istream&, std::string&)

而在 C 中,函数确实是

http://man7.org/linux/man-pages/man3/getline.3.html

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

选择一个并坚持下去!如果选择 C++,则使用 std::fstream 而不是 FILE* 等等。请记住在前面添加 std:: 或使用 using namespace std; 以避免错误。

所以它会这样开始:

std::ifstream arquivo("texto.txt");
int quantidade=0;
arquivo >> quantidade;
if(quantidade!=0){
    quantusuario=quantidade;
    for(int i=0;i<quantidade;i++){
        std::getline(arquivo,alunos[i].nome);
        arquivo >> alunos[i].matricula;

等等。请注意您已经在使用 std::string,因此您的选择已经做出。

thx 伙计们,它现在可以编译了。我这样写:

void CarregarArquivo(){
//FILE *arquivo;
//arquivo=fopen ("texto.txt","r");
int quantidade=0;
ifstream arquivo("texto.txt");
char barra=' ';
arquivo >> quantidade;
if(quantidade!=0){
    quantusuario=quantidade;

    for(int i=0;i<quantidade;i++){
        getline(arquivo,alunos[i].nome);
        cout << alunos[i].nome;
        arquivo >> alunos[i].matricula;
        arquivo >> alunos[i].nascimento.dia;
        arquivo >> barra;
        arquivo >> alunos[i].nascimento.mes;
        arquivo >> barra;
        arquivo >> alunos[i].nascimento.ano;
        if(alunos[i].numero!=0){
            for(int j=0;j<alunos[i].numero;j++){
                getline(arquivo,alunos[i].materias[j].nome);
                arquivo >> alunos[i].materias[j].nota;
            }
        }
    }
}
else if(quantidade == 0 && arquivo == NULL){
    quantusuario =0;
}
arquivo.close();
}

"barra" 是因为我的 txt 有一个这种格式的日期:xx/xx/xxxx。现在我需要的只是 Getline 工作正常。 :(。它还没有工作。 我的txt是这样的:

2
Thiago
12312
21/12/1995
Math
10.0
Scott
31233
12/12/1995

首先是需要阅读的人数。接下来是 birth.The cout 的注册和日期 getline 仅用于测试,它 printf nothing.iksemyonov 我正在使用 using namespace std。 编辑: 问题来自.txt的形成,thx guys