1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Programação' iniciada por khaluh, 8 de Janeiro de 2008. (Respostas: 19; Visualizações: 1066)

  1. khaluh

    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
     
  2. prosaQue

    prosaQue Power Member

    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..
     
  3. khaluh

    khaluh Power Member

    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...
     
  4. zyThuM

    zyThuM Power Member


    E a inicialização do vector está a ser feita a onde?
     
  5. khaluh

    khaluh Power Member

    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);
    
    };
     
  6. zyThuM

    zyThuM Power Member

    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.
     
  7. khaluh

    khaluh Power Member

    Obrigado, mas continua a dar o mesmo erro.
     
  8. napalm

    napalm Power Member

    não falta aí um #endif?
     
  9. jahred

    jahred Power Member

    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...
     
  10. khaluh

    khaluh Power Member

    Boas, o erro está no titulo: Erro C2061 syntax error : identifier 'vec_aves'
     
  11. zyThuM

    zyThuM Power Member

    O teu ficheiro .cpp so tem aquele conteudo?
     
  12. AragTey

    AragTey Power Member

    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: 8 de Janeiro de 2008
  13. khaluh

    khaluh Power Member



    Está tudo no mesmo ficheiro, se acharem melhor coloco o ficheiro, mas aviso que tem cerca de 800linhas
     
  14. napalm

    napalm Power Member

    Por mim força nisso. É que nos está a escapar a todos qualquer coisa.
     
  15. khaluh

    khaluh Power Member

    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.
     
  16. napalm

    napalm Power Member

    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: 8 de Janeiro de 2008
  17. khaluh

    khaluh Power Member

    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
     
  18. napalm

    napalm Power Member

    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.
     
  19. Tyran

    Tyran Power Member

    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
     
  20. khaluh

    khaluh Power Member

    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');
     

Partilhar esta Página