[RESOLVIDO]Código typedef dando erro

Resolvido;

o seu programa tem o cabeçalho errado.

vc deveria usar

#include <iostream>
#include <stdio.h>

com isso, eu tentei compilar e tive todos esses erros ( chamei isso de a.c pois preguiça):

$ g++ -Wall a.c 
a.c: In function ‘int main()’:
a.c:16:51: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int*’ [-Wformat=]
                 scanf("%s %i", &Turma[i].matricula);
                                                   ^
a.c:16:51: warning: format ‘%i’ expects a matching ‘int*’ argument [-Wformat=]
a.c:23:65: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat=]
         scanf("%s %f %f %f", Turma[i].matricula, &Turma[i].notas);
                                                                 ^
a.c:23:65: warning: format ‘%f’ expects argument of type ‘float*’, but argument 3 has type ‘float (*)[3]’ [-Wformat=]
a.c:23:65: warning: format ‘%f’ expects a matching ‘float*’ argument [-Wformat=]
a.c:23:65: warning: format ‘%f’ expects a matching ‘float*’ argument [-Wformat=]
a.c:26:27: error: expected ‘)’ before ‘turma’
  Aluno ImprimeTurma(Turma turma, notas nota);
                           ^
a.c:26:40: error: expected ‘)’ before ‘nota’
  Aluno ImprimeTurma(Turma turma, notas nota);
                                        ^
a.c:26:44: error: no matching function for call to ‘Aluno::Aluno(Aluno [5], Aluno&)’
  Aluno ImprimeTurma(Turma turma, notas nota);
                                            ^
a.c:9:3: note: candidate: Aluno::Aluno()
 } Aluno;
   ^
a.c:9:3: note:   candidate expects 0 arguments, 2 provided
a.c:9:3: note: candidate: Aluno::Aluno(const Aluno&)
a.c:9:3: note:   candidate expects 1 argument, 2 provided
a.c:27:6: error: name lookup of ‘i’ changed for ISO ‘for’ scoping [-fpermissive]
  for(i = 0; i < 5; i++)
      ^
a.c:27:6: note: (if you use ‘-fpermissive’ G++ will accept your code)
a.c:29:3: error: ‘soma’ was not declared in this scope
   soma = notas[i] + soma;
   ^
a.c:29:15: error: no match for ‘operator[]’ (operand types are ‘Aluno’ and ‘int’)
   soma = notas[i] + soma;
               ^
a.c:30:3: error: ‘media’ was not declared in this scope
   media = CalculaMediaAluno(soma/3);
   ^
a.c:30:35: error: ‘CalculaMediaAluno’ was not declared in this scope
   media = CalculaMediaAluno(soma/3);
                                   ^
a.c:32:36: error: expected ‘)’ before ‘turma’
   printf("Aluno %d - Media = %f\n" turma[i].matricula, turma[i].media);
                                    ^
a.c:32:56: error: ‘turma’ was not declared in this scope
   printf("Aluno %d - Media = %f\n" turma[i].matricula, turma[i].media);

então vamos la

Primeiro: decida se vc vai usar C ou C++

printf / scanf são mais comuns em programas C ( alguem pode discordar de mim ). em C++ vc tem iostream que te oferece os streams cin e cout para entrada e saida que podem ser muito mais faceis de lidar.

https://www.inf.pucrs.br/~pinho/PRGSWB/Streams/streams.html

Dito isso, o seu programa tem tantos problemas que fica realmente dificil te ajudar. por exemplo, isso:

Aluno ImprimeTurma(Turma turma, notas nota);

é um prototipo de uma função. ela indica ao compilador “oh, se vc encontrar uma função ImprimeTurma então saiba q ela retorna um Aluno e ela recebe esses parametros”

o lugar de prototipo de função é no começo do arquivo fonte. não dentro de uma função.

detalhe q no caso vc tem que usar

ImprimeTurma(turma); /* vamos assumir que Turma com T maisculo eh um problema de digitação */

e isso é uma função void.

re-leia o exercicio. reflita. bola pra frente

1 curtida

Também acho mais fácil, mas o código para completar está em C. Logo, pensei que o professor queria que fosse em C não em C++. Ele não disse nada sobre mudar isso.