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
错误:没有匹配函数来调用 '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
.
您需要重写代码并将 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