繁体   English   中英

错误:没有用于调用“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 请工作。

我是巴西人。忽略变量的名称。 对不起我的英语。

您正在混淆 C 库的FILE *函数和使用std::istream C++ 库函数。

您需要重写代码并用std::ifstream替换FILE *所有用法,包括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

首先是需要阅读的人数。 接下来是注册和出生日期。cout bellow getline 仅用于测试,它 printf nothing.iksemyonov 我正在使用命名空间 std。 编辑:麻烦来自 .txt 的形成,thx 伙计们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM