C++ --> Erro C2061 syntax error : identifier 'vec_aves'

khaluh

Power Member
Boa noite

Estou a ter este erro num programa que estou a desenvolver e ele ocorre nesta instrução:

Código:
vec_aves[num_aves].id_ave		= num_aves ;
vec_aves[num_aves].ave_anilha		= ave_anilha ;
vec_aves[num_aves].ave_nome_criador     = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai	= ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae	= ave_anilha_mae;
vec_aves[num_aves].ave_nasc		= ave_nasc;

O vec_aves faz parte da seguinte classe:
Código:
class Aves
{
	
public:

	int id_ave;

	string ave_anilha;

	string ave_nome_criador;

	string ave_anilha_pai;

	string ave_anilha_mae;

	char   ave_nasc;
	
	Aves (void);//Constructor
	
	~Aves (void);//Destrutor
	
	void print(int a, int b);

};

E inicializo-o aqui:

Código:
Aves vec_aves[MAX_AVES]; // vector a conter todas as aves em memória...

E MAX_AVES está definido assim:

Código:
#define MAX_AVES 1000


Conseguem ajudar-me a entender o erro??? Já estou com os olhos um pouco de rastos de tanto tentar descobrir o erro...

Obrigado
 
Código:
vec_aves[num_aves].id_ave		= num_aves ;
vec_aves[num_aves].ave_anilha		= ave_anilha ;
vec_aves[num_aves].ave_nome_criador     = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai	= ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae	= ave_anilha_mae;
vec_aves[num_aves].ave_nasc		= ave_nasc;

onde colocaste este código ?
e ao tares a fazer vec_aves[num_aves].ave_nasc , tás a chamar o atributo do objecto, portanto presumo que já tenhas preenchido o vector com objectos..
 
Código:
vec_aves[num_aves].id_ave		= num_aves ;
vec_aves[num_aves].ave_anilha		= ave_anilha ;
vec_aves[num_aves].ave_nome_criador     = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai	= ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae	= ave_anilha_mae;
vec_aves[num_aves].ave_nasc		= ave_nasc;

onde colocaste este código ?
e ao tares a fazer vec_aves[num_aves].ave_nasc , tás a chamar o atributo do objecto, portanto presumo que já tenhas preenchido o vector com objectos..

Esse codigo faz parte da função InsereAves(), só corre depois de feitas todas as verificações... Neste caso, é chamado para inserir um objecto, não para consultar...
 
E a inicialização do vector está a ser feita a onde?

Ficheiro aves.cpp
Código:
#include "aves.h"
#include "ecran.h"

Aves vec_aves[MAX_AVES]; // vector a conter todas as aves em memória...

int num_aves = 0; // numero de aves em memória...

Ficheiro aves.h
Código:
#ifndef aves_h
#define aves_h


#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
#include <fstream>

#define MAX_AVES 1000
#define FILE_AVES "listagem_aves.txt"


using namespace std;

class Aves
{
	
public:

	int id_ave;

	string ave_anilha;

	string ave_nome_criador;

	string ave_anilha_pai;

	string ave_anilha_mae;

	char   ave_nasc;
	
	Aves (void);//Constructor
	
	~Aves (void);//Destrutor
	
	void print(int a, int b);

};
 
Pelo sim ou pelo o não mete "using namespace std;" no .cpp. Já não me recordo se tens de meter no .cpp mas experimenta.
 
sim, falta esse endif...

e isto está certo?

Aves (void);//Constructor

~Aves (void);//Destrutor

se calhar até está mesmo certo... eu é que costumo usar só ()...

saber que erro dá é que dava assim um certo jeito para ajudar...

Boas, o erro está no titulo: Erro C2061 syntax error : identifier 'vec_aves'
 
Ficheiro aves.cpp
Código:
#include "aves.h"
#include "ecran.h"

Aves vec_aves[MAX_AVES]; // vector a conter todas as aves em memória...

int num_aves = 0; // numero de aves em memória...

Aqui tens a inicialização da variável Aves. Mas depois onde fazes:

Código:
vec_aves[num_aves].id_ave		= num_aves ;
vec_aves[num_aves].ave_anilha		= ave_anilha ;
vec_aves[num_aves].ave_nome_criador     = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai	= ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae	= ave_anilha_mae;
vec_aves[num_aves].ave_nasc		= ave_nasc;

é num mesmo ficheiro ou noutro ficheiro diferente? Parece-me que tens ai um problema com declaracao com variaves extern.
 
Última edição:
Aqui tens a inicialização da variável Aves. Mas depois onde fazes:

Código:
vec_aves[num_aves].id_ave		= num_aves ;
vec_aves[num_aves].ave_anilha		= ave_anilha ;
vec_aves[num_aves].ave_nome_criador     = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai	= ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae	= ave_anilha_mae;
vec_aves[num_aves].ave_nasc		= ave_nasc;

é num mesmo ficheiro ou noutro ficheiro diferente? Parece-me que tens ai um problema com declaracao com variaves extern.



Está tudo no mesmo ficheiro, se acharem melhor coloco o ficheiro, mas aviso que tem cerca de 800linhas
 
Por mim força nisso. É que nos está a escapar a todos qualquer coisa.

Boas

A pedido de muitas familias (he he he) cá vai:

Aves.h


Código:
#ifndef aves_h
#define aves_h


#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
#include <fstream>

#define MAX_AVES 1000
#define FILE_AVES "listagem_aves.txt"

using namespace std;

class Aves
{
	
public:

	int id_ave;

	string ave_anilha;

	string ave_nome_criador;

	string ave_anilha_pai;

	string ave_anilha_mae;

	char   ave_nasc;
	
	Aves (void);//Constructor
	
	~Aves (void);//Destrutor
	
	void print(int a, int b);

};
	
	void insereAve(void);

	void alteraAve(void);

	void eliminaAve(void);

	void listaAve(void);

	void mostraAve(int a, int b);//mostra a listagem das aves
	
    int procuraAve(string ave_anilha);
    
	void carregaaves(void);
    
    void descarregaaves(void);
    
        
    
#endif

Aves.cpp

Código:
#include "aves.h"
#include "ecran.h"

using namespace std;

Aves vec_aves[MAX_AVES]; // vector a conter todas as aves em memória...

int num_aves = 0; // numero de aves em memória...


void GOTOXY ( WORD y, WORD x);

void cursorOn(void);

void cursorOff(void);

void cor(char cores);

void caixa(int v_sup, int v_inf, int tamanho);

void limpa_caixa(int v_sup, int v_inf, int tamanho);

void cabecalho(void);



Aves::Aves(void) //Construtor
{

}

Aves::~Aves(void) //Destrutor
{
	
}

// --------------------------------- Definição da função print -----------------------------------

void Aves::print(int a, int b)	// vai imprimir todas as informações da ave em causa...
{
	int x = 0;
	cursorOff();
	
	for (x=0;x<50;x++)
	{
		if (ave_anilha[x] == '*')
		{
			ave_anilha[x] = ' ';
		}		
	}
	for (x=0;x<50;x++)
	{
		if (ave_nome_criador[x] == '*')
		{
			ave_nome_criador[x] = ' ';
		}	
	}
	for (x=0;x<50;x++)
	{
		if (ave_anilha_pai[x] == '*')
		{
			ave_anilha_pai[x] = ' ';
		}
	}
	for (x=0;x<50;x++)
	{
		if (ave_anilha_mae[x] == '*')
		{
			ave_anilha_mae[x] = ' ';
		}
	}
	GOTOXY(a,b);
	cout << "ID da Ave: "  << id_ave;
	GOTOXY(a+2,b);
	cout << "Anilha: " << ave_anilha;
	GOTOXY(a+4,b);
	cout << "Nome do Criador: " << ave_nome_criador;
	GOTOXY(a+6,b);
	cout << "Anilha do Pai: " << ave_anilha_pai;
	GOTOXY(a+8,b);
	cout << "Anilha da Mãe: " << ave_anilha_mae;
	GOTOXY(a+10,b);
	cout << "Nascido cá: " << ave_nasc;
	
} 


// ----------------------------- Definição da função insereAve-------------------------------

void insereAve()	// vai inserir nova ave
{

	int x=0, i, id_a, id_p, id_m ;

	int comp_ave=0;

    int posicao = -1, resposta;
    
	bool ave_nasc;

	char ave_anilha[10], ave_anilha_pai[10], ave_anilha_mae[10], ave_nome_criador[50], auxid_ave[10], auxid_ave_p[10], auxid_ave_m[10];

	do{
		cabecalho();
		GOTOXY (6,24);
		cor(verde);
		cout << "INTRODUCAO DOS DADOS DA AVE";
		
		if(num_aves >= MAX_AVES)	// verificar se ainda cabem mais aves no vector...
		{ 
			cor(branco | azullf);
			caixa(20,25,20);
			GOTOXY(21,22);		
			cout << "NAO E POSSIVEL INSERIR MAIS AVES";
			GOTOXY(23,29);
			cout << "Pressione uma tecla...";
			_getch();
			return; //se não couberem saimos da função...		
		}
				
		GOTOXY(10,10);
		cout << "Anilha da Ave: ";
		GOTOXY(12,10);	
		cout << "Nome do Criador: ";
		GOTOXY(14,10);
		cout << "Anilha do Pai: ";
		GOTOXY(16,10);
		cout << "Anilha da Mãe: ";
		GOTOXY(18,10);
		cout << "Nascido cá: ";

		do 
		{
			id_a=0;		// ciclo de validação da anilha
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave,sizeof(auxid_ave));
		
			if(auxid_ave[0]=='\0')		// caso não seja introduzido nada...
				id_a=-1;
		
			if (strlen( auxid_ave )!=10)		// se o tamanho for diferente de 10...
				id_a=-1;
		
			if (id_a<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				_getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset_s(auxid_ave , ' '); 
				printf( "%s", auxid_ave);
			}
		
		}while (id_a<0);

	   resposta = procuraAve(ave_anilha); // para ver se já existe
		   
	   if(resposta != -1)
	   {
		cor(branco | azullf);
		caixa(22,27,17);
		GOTOXY(23,29);	
		cout << "Ave ja registada!!";
		GOTOXY(25,29);
		cout << "Pressione uma tecla...";
		cor(azulf | brancol);
		caixa(30,43,25);
		vec_aves[resposta].print(32,17); // mostra os dados da ave
		cor(amarelo);
		_getch();
		return;   // e como não vamos fazer mais nada sai da função...
	   }
		   // caso contrario, caso n exista, continuamos...

	   do 
		{
		   
		   id_m=0;		// ciclo de validação da anilha da mae
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave_m,sizeof(auxid_ave_m));
		
			if(auxid_ave_m[0]=='\0')		// caso não seja introduzido nada...
				id_m=-1;
		
			if (strlen( auxid_ave_m )!=10)		// se o tamanho for diferente de 10...
				id_m=-1;
		
			if (id_m<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				_getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset_s(auxid_ave_m , ' '); 
				printf( "%s", auxid_ave_m);
			}
		
		} while (id_m<0);

	   	return;   // e como não vamos fazer mais nada sai da função...


	   do 
	   {
		   id_p=0;		// ciclo de validação da anilha do pai
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave_p,sizeof(auxid_ave_p));
		
			if(auxid_ave_p[0]=='\0')		// caso não seja introduzido nada...
				id_p=-1;
		
			if (strlen( auxid_ave_p )!=10)		// se o tamanho for diferente de 10...
				id_p=-1;
		
			if (id_p<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				_getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset_s(auxid_ave_p , ' '); 
				printf( "%s", auxid_ave_p);
			}
		
		}
		while (id_p<0);

	   	return;   // e como não vamos fazer mais nada sai da função...
	}   
		// Vai carregar a 1ª posição livre no vector (sempre igual ao numero de aves)
		   
		vec_aves[num_aves].id_ave			= num_aves ;
		vec_aves[num_aves].ave_anilha		= ave_anilha ;
		vec_aves[num_aves].ave_nome_criador = ave_nome_criador;
		vec_aves[num_aves].ave_anilha_pai	= ave_anilha_pai;
		vec_aves[num_aves].ave_anilha_mae	= ave_anilha_mae;
		vec_aves[num_aves].ave_nasc			= ave_nasc;

		cor(branco | azullf);
		caixa(25,30,17);
		GOTOXY(26,26);
		cout << "Ave inserida com sucesso";
		GOTOXY(28,29);
		cout << "Pressione uma tecla...";
		num_aves ++; // mais um!!!
		_getch();

		GOTOXY(34,19);
		cor(amarelo); 
		cout << "PRESSIONE \'P\' PARA INTRODUZIR MAIS AVES: ";
		cursorOn();
		cor(verde);
		resposta=getch();
		
	
	while (resposta== 'p' || resposta== 'P');

	cor(amarelo);    
	return;   
}  



// ----------------------------- Definição da função alteraAve -------------------------------

void alteraAve()
{
	
	int id_ave, x=0, i, id_a, id_p, id_m, nom;

	int comp_ave=0;

    int posicao = -1, resposta;
    
	char ave_nasc, ave_anilha[10], ave_anilha_pai[10], ave_anilha_mae[10], ave_nome_criador[50], auxid_ave[10], auxid_ave_p[10], auxid_ave_m[10];
	cabecalho();
	GOTOXY (6,25);
	cor(verde);
	cout << "ALTERACAO DOS DADOS DA AVE";

	if(num_aves<1)
	{
		cor(branco | azullf);
		caixa(20,25,19);
		GOTOXY(21,25);
		cout << "NAO EXISTEM AVES A ALTERAR";
		GOTOXY(23,29);
		cout << "Pressione uma tecla...";
		getch();
		cor(amarelo);
		return;
	}
	GOTOXY(10,10);
	cor(amarelo);
	cout << "Insira a anilha da ave alterar: ";

	do {
		id_a=0;		// ciclo de validação da anilha
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave,sizeof(auxid_ave));
		
			if(auxid_ave[0]=='\0')		// caso não seja introduzido nada...
				id_a=-1;
		
			if (strlen( auxid_ave )!=10)		// se o tamanho for diferente de 10...
				id_a=-1;
		
			if (id_a<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset(auxid_ave , ' '); 
				printf( "%s", auxid_ave);
			}
		
		}
	while (id_a<0);
	
	i = procuraAve(ave_anilha);
	
	if( i == -1)
	{
		cor(branco | azullf);
		caixa(25,30,17);
		GOTOXY(26,29);
		cout << "AVE INEXISTENTE!!!";
		GOTOXY(28,29);
		cout << "Pressione uma tecla...";
		getch();
		cor(amarelo);
        return;
	}
	cor(azulf | brancol);	// vai mostrar os dados antigos
	caixa(13,28,25);
	GOTOXY(14,33);
	cout << "DADOS  ANTIGOS";
	GOTOXY(15,33);
	cout << "==============";
	vec_aves[i].print(17,17); // mostra a ave...    
	GOTOXY(30,27);
	cor(verde);
	cout << "INTRODUZA OS NOVOS DADOS";
	cor(amarelo);
	GOTOXY(31,10);
	cout << "____________________________________________________________";
	GOTOXY(34,10);
	cout << "Anilha da Ave: ";
	GOTOXY(36,10);
	cout << "Nome do Criador: ";
	GOTOXY(38,10);
	cout << "Anilha do Pai: ";
	GOTOXY(40,10);
	cout << "Anilha da Mãe: ";
	GOTOXY(42,10);
	cout << "Nascido cá: ";
	
	do {id_a=0;		// ciclo de validação da anilha
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave,sizeof(auxid_ave));
		
			if(auxid_ave[0]=='\0')		// caso não seja introduzido nada...
				id_a=-1;
		
			if (strlen( auxid_ave )!=10)		// se o tamanho for diferente de 10...
				id_a=-1;
		
			if (id_a<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset(auxid_ave , ' '); 
				printf( "%s", auxid_ave);
			}
		
		}
	while (id_a<0);

	do {id_p=0;		// ciclo de validação da anilha do pai
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave_p,sizeof(auxid_ave_p));
		
			if(auxid_ave_p[0]=='\0')		// caso não seja introduzido nada...
				id_p=-1;
		
			if (strlen( auxid_ave_p )!=10)		// se o tamanho for diferente de 10...
				id_p=-1;
		
			if (id_p<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset(auxid_ave_p , ' '); 
				printf( "%s", auxid_ave_p);
			}
		
		}while (id_p<0);

	   	return;   // e como não vamos fazer mais nada sai da função...
		
		   


	   do {
			id_m=0;		// ciclo de validação da anilha da mae
		
			cursorOn();
			fflush(stdin);
			GOTOXY(10,25);
			cor(verde);
			cin.getline (auxid_ave_m,sizeof(auxid_ave_m));
		
			if(auxid_ave_m[0]=='\0')		// caso não seja introduzido nada...
				id_m=-1;
		
			if (strlen( auxid_ave_m )!=10)		// se o tamanho for diferente de 10...
				id_m=-1;
		
			if (id_m<0)		// mensagem de erro
			{
				cor(branco | azullf);
				caixa(25,30,17);
				GOTOXY(26,31);
				cout << "Anilha mal introduzida!";
				GOTOXY(28,29);
				cout << "Pressione uma tecla...";
				getch();
				limpa_caixa(25,30,17);
			
				GOTOXY(10,25);	// vai apagar o que foi introduzido
				cor(verde);
				_strset(auxid_ave_m , ' '); 
				printf( "%s", auxid_ave_m);
			}
	   }
	while (id_m<0);

   
     

	vec_aves[num_aves].ave_anilha = ave_anilha ;
	vec_aves[num_aves].ave_nome_criador = ave_nome_criador;
	vec_aves[num_aves].ave_anilha_pai = ave_anilha_pai;
	vec_aves[num_aves].ave_anilha_mae = ave_anilha_mae;
	vec_aves[num_aves].ave_nasc = ave_nasc;

	cor(branco | azullf);
	caixa(45,50,17);
	GOTOXY(46,26);
	cout << "AVE ALTERADO COM SUCESSO";
	GOTOXY(48,29);
	cout << "Pressione uma tecla...";
	getch();
	cor(amarelo);
	
	return;
}

// ----------------------------- Definição da função eliminaAve -------------------------------

void eliminaAve()	// vai eliminar uma ave existente
{
	int i, posicao=-1, id_ave, id_a, j, resposta=0;

	char auxid_ave[10];
	
	cabecalho();
	GOTOXY (6,27);
	cor(verde);
	cout << "ELIMINAR AVE";
	GOTOXY(10,10);
	cor(amarelo);
	cout << "Insira a anilha da ave a eliminar: ";
	
	do {id_a=0;
		cursorOn();
		fflush(stdin);
		GOTOXY(10,46);
		cor(verde);
		cin.getline (auxid_ave,sizeof(auxid_ave));
	
		if(auxid_ave[0]=='\0')		// caso não seja introduzido nada...
			id_a=-1;
	
		if (strlen( auxid_ave)!=10)		// se o tamanho for diferente de 10...
			id_a=-1;
	
		
		if (id_a<0)
		{
			cor(branco | azullf);
			caixa(25,30,17);
			GOTOXY(26,31);
			cout << "Anilha mal inserida!";
			GOTOXY(28,29);
			cout << "Pressione uma tecla...";
			getch();
			limpa_caixa(25,30,17);
		
			GOTOXY(10,46);	// vai apagar o que foi introduzido
			cor(verde);
			_strset(auxid_ave , ' ');
			printf( "%s", auxid_ave);
		}
	
	}while (id_a<0);
	
    posicao = procuraAve(auxid_ave);
	
	if( posicao == -1)
	{
		cor(branco | azullf);
		caixa(25,30,17);
		GOTOXY(26,29);
		cout << "Anilha não existente!!!";
		GOTOXY(28,29);
		cout << "Pressione uma tecla...";
		getch();
		cor(amarelo);
        return;
	}
	
	else
	{
		cor(azulf | brancol);
		caixa(15,28,25);
		vec_aves[posicao].print(17,17);
		GOTOXY(31,25);
		cor(amarelo); 
		cout << "PRESSIONE \'S\' PARA ELIMINAR: ";
		cursorOn();
		cor(verde);
		resposta=getche();
		switch (resposta)	// pede confirmação para apagar
		{
		case 's':
		case 'S':	i = posicao;
			for(i = posicao; i < (num_aves -1); i++)
			{
				vec_aves[i] = vec_aves[i+1];
			} 
			
			num_aves --;
			cor(branco | azullf);
			caixa(35,40,17);
			GOTOXY(36,30);
			cout << "Ave eliminada!!!";
			GOTOXY(38,29);
			cout << "Pressione uma tecla...";
			cor(amarelo);
			getch();
			
		default:return;
		}		
	return;
    }	
	
}

// ----------------------------- Definição da função procuraAve ------------------------------

int procuraAve(string ave_anilha)	// vai devolver o indice da posição da anilha no vector
{
	int i = 0;
	
	for(i = 0; i < num_aves; i++)
	{
		
		if (vec_aves[i].ave_anilha == ave_anilha)
			return i;
	}
	return -1;	//caso a ave não exista devolve -1 
	
}


// ----------------------------- Definição da função carregaAve -----------------------------

void carregaAve(void)	// carrega todas as aves do ficheiro
{
	ifstream entrada(FILE_AVES);
	
	if (!entrada)
	{
		cout << "\n\n\t\tERRO NA ABERTURA DO FICHEIRO DE AVES!!!";
		cout << "\n\n\nPressione uma tecla.";
		getch();
		return;
	}
	
	entrada >> num_aves;
		  
	int i=0;	  
	for (i=0; i<num_aves; i++)
	{
		entrada >> vec_aves[i].ave_anilha;	
		entrada >> vec_aves[i].ave_nome_criador;
		entrada >> vec_aves[i].ave_anilha_pai;
		entrada >> vec_aves[i].ave_anilha_mae;
		entrada >> vec_aves[i].ave_nasc;
	}
		  
	entrada.close();
	return;	
}

// ----------------------------- Definição da função descarregaAve --------------------------

void descarregaAve(void)	// descarrega todos as aves para o ficheiro
{
	
	ofstream saida(FILE_AVES);
	
	if(!saida){
		cout << "\n\n\t\tERRO NA ABERTURA DO FICHEIRO DAS AVES!!!";
		cout << "\n\n\nPressione uma tecla.";
		getch();
		return;
	}
	
	saida << num_aves << endl;
	
	int i = 0;
	for(i = 0; i < num_aves; i++)
	{
		saida << "\n"; // linha em branco...
		saida << vec_aves[i].ave_anilha << "\n";    
		saida << vec_aves[i].ave_nome_criador << "\n";
		saida << vec_aves[i].ave_anilha_pai << "\n";
		saida << vec_aves[i].ave_anilha_mae << "\n";
		saida << vec_aves[i].ave_nasc << "\n";
	}
	
	saida.close();
	return;
	
} 

// ----------------------------- Definição da função listaAve --------------------------------

void listaAve(void)
{
	int i, x=0, posicao=0, a=13, altura;
	
	cursorOff();
	cabecalho();
	GOTOXY (6,30);
	cor(verde);
	cout << "LISTAGEM DAS AVES";
	
	if (num_aves>0)
	{
		altura=2*num_aves+1;
		cor(azulf | brancol);
		caixa(10,12+altura,32);
		GOTOXY(11,16);
		cout << "Anilha";
		GOTOXY(11,47);
		cout << "Criador";
		GOTOXY(11,64);
		cout << "Nascida cá";
	
		for (i=0;i<num_aves;i++)
		{
			for (x=0;x<50;x++)	//vai trocar os asteriscos por espaços em branco
			{
				if (vec_aves[posicao].ave_anilha[x] == '*')
				{
					vec_aves[posicao].ave_anilha[x] = ' ';
				}
			}
			
			GOTOXY(a,10);
			cout <<	vec_aves[posicao].ave_anilha;
			GOTOXY(a,50);
			printf("%5.2f",vec_aves[posicao].ave_nome_criador);
			GOTOXY(a,61);
			cout << vec_aves[posicao].ave_nasc;
				
			for (x=0;x<50;x++)
			{
				if (vec_aves[posicao].ave_nome_criador[x] == ' ')
				{
					vec_aves[posicao].ave_nome_criador[x] = '*';
				}
			}
		
			a=a+2;
			posicao++;	
		}
		cor(branco | azullf);
		caixa(20+altura,23+altura,17);
		GOTOXY(21+altura,29);
		cout << "Pressione uma tecla...";
		getch();
		cor(amarelo);
	}
	else
	{
		cor(branco | azullf);
		caixa(20,25,19);
		GOTOXY(21,24);
		cout << "NAO EXISTEM AINDA AVES PARA LISTAR";
		GOTOXY(23,29);
		cout << "Pressione uma tecla...";
		getch();
		cor(amarelo);
	}
}


// ----------------------------- Definição da função mostraAve --------------------------------

void mostraAve(int a, int b)
{
	int i, x=0, posicao=0;
	
	cursorOff();
	
	if (num_aves>0)
	{
	
		for (i=0;i<num_aves;i++)
		{
			for (x=0;x<50;x++)	//vai trocar os asteriscos por espaços em branco
			{
				if (vec_aves[posicao].ave_anilha[x] == '*')
				{
					vec_aves[posicao].ave_anilha[x] = ' ';
				}
			}
			
			GOTOXY(a,b);
			cout <<	vec_aves[posicao].ave_anilha;
			GOTOXY(a,b+12);
			cout << vec_aves[posicao].ave_nome_criador;
			
			for (x=0;x<50;x++)
			{
				if (vec_aves[posicao].ave_nome_criador[x] == ' ')
				{
					vec_aves[posicao].ave_nome_criador[x] = '*';
				}
			}
			
			a=a+2;
			posicao++;	
		}

	}
	else
	{
		cor(branco | azullf);
		caixa(20,25,19);
		GOTOXY(21,24);
		cout << "NAO EXISTEM AINDA AVES PARA LISTAR";
		GOTOXY(23,29);
		cout << "Pressione uma tecla...";
		getch();
		cor(amarelo);
		return;
	}
}

Caso entendam necessário colocar o ecra.h, tambem o posso fazer, mas julgo desnecessario neste caso.
 
Código:
do { ... }
while(cond);
e acho que ficas a perceber o erro :P
Deixo-te também uma sugestão, usa whiles em vez de do's. Nunca apanharias um erro destes em primeiro lugar.
O do-while deve ser usado somente em casos muito específicos.
 
Última edição:
Código:
do { ... }
while(cond);
e acho que ficas a perceber o erro :P
Deixo-te também uma sugestão, usa whiles em vez de do's. Nunca apanharias um erro destes em primeiro lugar.
O do-while deve ser usado somente em casos muito específicos.

Fiquei um bocado confuso.

Alterei o
Código:
while (id<0) para while (id=0)
,
Código:
while (id_p<0) para while (id_p=0)
e o
Código:
while (id_m<0) para while (id_m=0)
, pois da forma anterior nao fazia o que pretendia (na minha interpretação), mas dá o erro igual.

@Napalm, podes abrir mais o véu? É que nao percebi, sinceramente.


Obrigado
 
Claro. O do{..} que começa na linha 103 não está a ser terminado com um while(...);

O que estava a dizer é que se usasses só whiles nunca na vida terias um erro destes.
 
Claro. O do{..} que começa na linha 103 não está a ser terminado com um while(...);

O que estava a dizer é que se usasses só whiles nunca na vida terias um erro destes.

Mas se ah ciclos em que entra sempre ah cabeça o do while vem mesmo a calhar lol

Epah isso metias no vim que te apanha logo essas coisas de { mal fechados, etc...

cumpzz
 
Claro. O do{..} que começa na linha 103 não está a ser terminado com um while(...);

O que estava a dizer é que se usasses só whiles nunca na vida terias um erro destes.

O
Código:
do{...}
da linha 103 termina com o
Código:
while (resposta== 'p' || resposta== 'P');
da linha 289.

Faltava uma chaveta a fechar o Do

Código:
while (resposta== 'p' || resposta== 'P');
troca por
Código:
[B]}[/B]
while (resposta== 'p' || resposta== 'P');
 
Back
Topo