Ir ao conteúdo
  • Cadastre-se

TAD Campeonato de Futebol (Ajuda)


brenojwc

Posts recomendados

Pessoal, Tenho que fazer um programa conforme o seguinte enunciado:

"Crie um tipo abstrato de dados para conter dados sobre o desempenho de um time de futebol em um campeonato. O TAD deve conter o número de vitórias, empates, derrotas, gols marcados e gols sofridos, além do nome da equipe. Crie mais um TAD para compor a tabela de um campeonato, contendo um vetor com capacidade para até 30 equipes, cada qual com os dados acima. O número real de equipes participantes deve fazer parte do TAD. Escreva uma função que calcule e imprima, para um determinado time (TAD correspondente passado como parâmetro para a função), o seu nome e a quantidade de pontos alcançados no campeonato, considerando 3 pontos para cada vitória e 1 ponto para cada empate. Considere que existe uma função denominada “CarregaDados”, cujo protótipo é dado abaixo, para simular a carga de dados das equipes em um campeonato, e monte um programa principal com (1) a carga dos dados, e (2) a geração de uma listagem da tabela de pontos, usando a função acima. void CarregaDados(TipoTabela tab, int numEquipes)"

Por enquanto criei o TAD do time de futebol, criei suas funções e fiz um arquivo main apenas para testar o que já foi criado conforme os três arquivos abaixo:

[B]TADTime.h:[/B]
//Definição do tipo Time:

typedef struct {
char nome[50];
int vitorias, empates, derrotas, golsFeitos, golsLevados;
} Time;

//Funções:

void AdicionaTime (Time&, char[50] , int, int, int, int, int);

void CalculaEImprime (Time&);




[B]TADTime.cpp:[/B]
#include <stdio.h>
#include "TADTime.h"

//Descrição das funções do TADTime:

void AdicionaTime (Time &time, char nome[50], int vitorias, int empates, int derrotas, int golsFeitos, int golsLevados) {

int i;

for (i = 0; i < 50; i++)
time.nome[i] = nome[i];

time.vitorias = vitorias;

time.empates = empates;

time.derrotas = derrotas;

time.golsFeitos = golsFeitos;

time.golsLevados = golsLevados;

}

void CalculaEImprime (Time &time) {

int i, pontos;

printf ("O time ");

for (i = 0; i < 50; i++)
printf ("%c", time.nome[i]);

pontos = time.vitorias * 3 + time.empates;
printf ("tem %d pontos no campeonato.", pontos);

}




[B]Main.cpp:[/B]
#include <stdio.h>
#include "TADTime.cpp"

int main () {

Time time;
char nome[50];
int vitorias, empates, derrotas, golsFeitos, golsLevados;

printf ("Entre com o nome do time a ser criado: ");
gets (nome);

printf ("Entre com o numero de vitorias: ");
scanf ("%d", &vitorias);

printf ("Entre com o numero de empates: ");
scanf ("%d", &empates);

printf ("Entre com o numero de derrotas: ");
scanf ("%d", &derrotas);

printf ("Entre com o numero de gols feitos: ");
scanf ("%d", &golsFeitos);

printf ("Entre com o numero de gols levados: ");
scanf ("%d", &golsLevados);

AdicionaTime (time, nome, vitorias, empates, derrotas, golsFeitos, golsLevados);

}

O compilador identificou os seguintes problemas:

Multiple definition of "AdicionaTime (Time&, char*, int, int, int, int, int)" first defined in line 6 of the file TADTime.cpp in function "AdicionaTime(Time&, char*, int, int, int, int, int)"

Multiple definition of "CalculaEImprime (Time&)" first defined in line 25 of the file TADTime.cpp in function "_Z15CalculaEImprimeR4Time".

Alguém sabe me explicar o que está causando esse erro? O que eu tenho que modificar no programa? Se alguém souber eu agradeço.

Link para o comentário
Compartilhar em outros sites

O erro tá acontecendo porque o main.cpp tem um include pro time.h, assim como o time.cpp.

O include é como se você tivesse recortando e colando o codigo daquele arquivo no lugar do include, então você acaba com as funções do time.h duplicadas.

A solução pra isso é modificar o seu time.h assim:


#ifndef _TIME_H_
#define _TIME_H_

typedef struct {
char nome[50];
int vitorias, empates, derrotas, golsFeitos, golsLevados;
} Time;

//Funções:

void AdicionaTime (Time&, char[50] , int, int, int, int, int);

void CalculaEImprime (Time&);

#endif

O comando #define diz pro compilador criar uma constante chamada _TIME_H_ (pode ser qualquer outro nome), e o comando #ifndef (if not defined) testa se esse macro já existe ou não. Se não existir, ele continua até #endif.

Ou seja, seu main.cpp vai adicionar o codigo do time.h, e o codigo do time.h vai criar aquele define. Quando o TADTime.cpp tentar adicionar o codigo de time.h pela segunda vez, o compilador vai ver que aquele define já existe, e vai ignorar o include.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Nao sei ao certo, mas acho que o erro é em função do tipo de protótipo que você usou(no qual não definiu o nome das variáveis, somente o tipo das mesmas). Há compiladores que não aceitam tal forma de prototipação. Redefina os protótipos da mesma forma que você fez na estruturação da função. Abraços.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!