I've Just finished a program and it's taking various errors. Can you show me Where its wrong?

/********************************************************************
 * Autor: Antônio Airton Cabral Neto                                *
 * Compilador: BC 3.1 Borland                                       *
 * Ambiente: Tela de scroll do DOS                                  *
 * Modelo de memoria: Small                                         *
 * Data: 12/09 e 14/09 de 2011                                      *
 * Objetivo: Programa de Lista Duplamente Encadeada com ponteiros   *
 *           dinâmicos, com conteúdo de endereço e nodos dinâmicos. *
 ********************************************************************/
 
 // ----- Inclui as bibliotecas necessarias

#include <iostream> // cout, cin, endl
#include <stdio.h> // printf e scanf
#include <conio.h> // clrscr() e getch()
#include <dos.h> // sound(), nosound() e delay()
#include <process.h> // exit()
#include "C:\bc-dos\mylib.h"

// --------------- Declaracao de variaveis globais
#define esc 27
#define max 5

using namespace std;

/********************************************************************
*    --- Convencoes para funcionamento desta lista encadeada ---    *
*********************************************************************
* - Nodos contém um elemento inteiro em sua área de dados e dois.   *
*   ponteiros de manipulação (prox e ant).                          *
* - Lista vazia - prim=NULL; , ult=NULL; e livre=NULL               *
* - Lista inesgotável para insercao de novos elementos.             *
* - Inserção no final da lista.                                     *
* - Remoção com base em pesquisa de elemento.                       *
* - Lista não Ordenada.                                             *
*********************************************************************/

typedef struct nodo {
  //--------------- Área de Dados: ---------------- //
  int data;
  //-------------- Área de Ponteiros -------------- //
  struct nodo* ant;  // --- Ponteiro para nodo anterior.
  struct nodo* prox;  // --- Ponteiro para próximo nodo.
}nodo;

void create_list() {
  nodo* prim = new nodo;
  prim->ant=NULL;
  prim->prox=NULL;
  nodo* ult = prim;
  nodo* livre = prim->prox;
} // create_list();

void insert_nodo() {
  int n; // --- Variável para armazenar valor para ser atribuído
  char ch;
  moldura();
  gotoxy(30,3); cout << "Inclui elemento";
  gotoxy(3,7); cout << "Digite um elemento (n. inteiro) : ";
  cin >> n;     // --- Recebe valor para ser armazenado
  livre = new nodo;   // ----- Cria novo nodo na Lista
  livre->data=n;      // ----- Atribui valor recebido ao novo nodo
  livre->ant=ult;     // ----- Ajusta os Ponteiros para o elemento anterior
  livre->prox=NULL;   // ----- Ajusta os Ponteiros para o próximo elemento
  ult=livre;          // ----- Ajusta ult para o fim da lista
  livre=livre->prox;  // ----- Ajusta livre para a próxima área livre
  gotoxy(3,8); cout << "Elemento inserido na Lista";
  gotoxy(3,(alt-1)); cout << "Tecle <enter> p/ continuar";
  ch=getch();
  while (ch!=13) // ----- Espera especificamente um enter p/ continuar
   ch=getch();
} // insert_nodo();

nodo search_nodo (int n) { // ----- Função procura nodo com valor n e retorna 
  nodo* p = prim;         //       endereço do nodo.  
  nodo* p2;
  do {
    if(p->data==n) {
      p2=p;
      return p2;
    } 
    else {
      if (p->prox!=NULL)
        p=p->prox;
      else {
        p2=NULL;
        return p2;
        }
    }
  } while (p->data!=n);
} // search_nodo();

void delete_nodo() {
  int n; // --- Variável para armazenar valor para ser removido
  nodo* p;          // --- Ponteiro para armazenat nodo á ser removido
  char ch;
  moldura();
  gotoxy(30,3); cout << "Remove elemento";
  gotoxy(3,7); cout << "Digite um elemento (n. inteiro) : ";
  cin >> n;     // --- Recebe valor para ser excluído
  p = search_nodo(n);
  if (p!=NULL) {
    p->ant->prox=p->prox;
    p->prox->ant=p->ant;
    delete p;
    gotoxy(3,8); cout << "Elemento removido da Lista";
    gotoxy(3,(alt-1)); cout << "Tecle <enter> p/ continuar";
    ch=getch(); 
    while (ch!=13) // ----- Espera especificamente um enter p/ continuar
      ch=getch();
  }
  else { 
    gotoxy(3,8); cout << "Elemento não Encontrado! ";
    apito();
    gotoxy(3,(alt-1)); cout << "Tecle <enter> p/ continuar";
    ch=getch(); 
    while (ch!=13) // ----- Espera especificamente um enter p/ continuar
      ch=getch();
  }
} // delete_nodo();

void show_list() {
  moldura();
  nodo *p = prim;
  char ch;
  if (prim->prox!=NULL) {
    gotoxy(30,3); cout << "Mostra lista";
    gotoxy(3,8);  cout << "Prim&..............: " << prim;
    gotoxy(3,9);  cout << "Livre&.............: " << livre;
    gotoxy(3,10); cout << "Ult&...............: " << ult;
    gotoxy(3,11); cout << "Último Inserido....: " << ult->data;
    gotoxy(3,12); cout << "Primeiro Inserido..: " << prim->prox->data;
    gotoxy(3,(alt-1)); 
    cout << "Pressione qualquer tecla para rolar a lista";
    getch();
    while (p->prox!=NULL) {
      gotoxy(3,13);  cout << "Nodo&..............: " << p;
      gotoxy(3,14);  cout << "Conteúdo...........: " << p->data;
      getch();
      if (p->prox!=NULL)
        p=p->prox;
      else
        gotoxy(3,(alt-1));
        cout << "Fim da Lista! Tecle <enter> para continuar."; 
        getch();
    } // while (p->prox!=NULL);
  } // if (prim->prox!=NULL);
  else {
    gotoxy(30,3); cout << "Mostra lista";
    gotoxy(3,8);  cout << "Prim&..............: " << prim;
    gotoxy(3,9);  cout << "Livre&.............: " << livre;
    gotoxy(3,10); cout << "Ult&...............: " << ult;
    gotoxy(3,(alt-1)); 
    cout << "Lista Vazia! Tecle <enter> para continuar.";
    ch = getch();
    while (ch!=13) // ----- Espera especificamente um enter p/ continuar
      ch=getch();
    }
}

void delete_list() {
  nodo* point = ult;
  while (point!=NULL) {
    nodo* p;
    p=point;
    point=p->ant;
    ult=point->ant;
    delete p;
}

// --------------- Programa Principal:

int main() {
  prim = new struct nodo;
  livre=prim->prox;
  ult=prim;
  create_list();
  int op=0;
  while (op!=5) {
    op=menu();
    switch (op) {
      case 1: insert_nodo(); break;
      case 2: exclui_nodo(); break;
      case 3: show_list(); break;
      case 4: create_list(); break;
      case 5: delete_list();
	      exit(0);
      default : cout << "Opção Inválida! ";
		exit(1);
    }
  }
  getch();
  return 0;
} // void main()
}

-----------------------------------------------------------------------------------------


MYLIB.H


/********************************************************************
 * Autor: Antônio Airton Cabral Neto                                *
 * Compilador: BC 3.1 Borland                                       *
 * Ambiente: Tela de scroll do DOS                                  *
 * Modelo de memoria: Small                                         *
 * Data: 12/09 e 14/09 de 2011                                      *
 * Objetivo: Programa de Lista Duplamente Encadeada com ponteiros   *
 *           dinâmicos, com conteúdo de endereço e nodos dinâmicos. *
 ********************************************************************/
 
 // ----- Inclui as bibliotecas necessarias

#include <iostream.h> // cout, cin, endl
#include <stdio.h> // printf e scanf
#include <conio.h> // clrscr() e getch()
#include <dos.h> // sound(), nosound() e delay()
#include <process.h> // exit(

// --------------- Declaracao de variaveis globais
#define esc 27
  const int larg=80, alt=24;

char tecla(void) {
  char ch1, ch2;
  unsigned char by; // um inteiro de 8 bits que por default e' visto como char
  ch1=getch();
  by=(int)ch1; // by contem o codigo da tecla "traduzido" para inteiro sem sinal de 8 bits
  if (by==0) {
    ch2=getch();
    by=(int)ch2;
    switch (by) {
      // ----- Seta para cima
      case 72 : by=128;
		break;
      // ----- Seta para baixo
      case 80 : by=129;
		break;
      // ----- Seta para direita
      case 77 : by=130;
		break;
      // ----- Seta para esquerda
      case 75 : by=131;
		break;
      // ----- DEL
      case 83 : by=127;
		break;
      // ----- Insert
      case 82 : by=135;
		break;
      // ----- Home
      case 71 : by=136;
		break;
      // ----- End
      case 79 : by=137;
		break;
      // ----- Page Up
      case 73 : by=138;
		break;
      // ----- Page Down
      case 81 : by=139;
		break;
      // ----- F1
      case 59 : by=140;
		break;
      // ----- F2
      case 60 : by=141;
		break;
      // ----- F3
      case 61 : by=142;
		break;
      // ----- F4
      case 62 : by=143;
		break;
      // ----- F5
      case 63 : by=144;
		break;
      // ----- F6
      case 64 : by=145;
		break;
      // ----- F7
      case 65 : by=146;
		break;
      // ----- F8
      case 66 : by=147;
		break;
      // ----- F9
      case 67 : by=148;
		break;
      // ----- F10
      case 68 : by=149;
		break;
      // ----- F11
      case 133 : by=150;
		break;
      // ----- F12
      case 134 : by=151;
		break;
    } // ----- switch (by)
    ch1=by;
  } // ----- if (by==0)
  return ch1;
} // ----- char tecla(void)

// --------------- Funcao apita um som de 275 Hz durante 0,35 seg.
void apito(void) {
  sound(275);
  delay(350);
  nosound();
  cout << " - Tecle <enter> p/ continuar";
  getch();
}

// --------------- Funcao monta moldura na tela.
void moldura(void) {
  int i;
  char Cima[81], Baixo[81], Meio[81], Comum[81];
  const char CimaEsq=201;
  const char CimaDir=187;
  const char BaixoEsq=200;
  const char BaixoDir=188;
  const char Vert=186;
  const char Horiz=205;
  const char TDir=185;
  const char TEsq=204;
  // --------------- Monta linha de Cima da Moldura
  Cima[0]=CimaEsq;
  for (i=1; i<=(larg-2); i++)
    Cima[i]=Horiz;
  Cima[(larg-1)]=CimaDir;
  Cima[larg]='\0';
  // --------------- Monta linha Comum da Moldura
  Comum[0]=Vert;
  for (i=1; i<=(larg-2); i++)
    Comum[i]=' ';
  Comum[(larg-1)]=Vert;
  Comum[larg]='\0';
  // --------------- Monta divisoria com caixa de status da Moldura
  Meio[0]=TEsq;
  for (i=1; i<=(larg-2); i++)
    Meio[i]=Horiz;
  Meio[(larg-1)]=TDir;
  Meio[larg]='\0';
  // --------------- Monta de baixo da Moldura
  Baixo[0]=BaixoEsq;
  for (i=1; i<=(larg-2); i++)
    Baixo[i]=Horiz;
  Baixo[(larg-1)]=BaixoDir;
  Baixo[larg]='\0';
  // --------------- Escreve Moldura na Tela
  clrscr();
  cout << Cima;
  cout << Comum;
  cout << Comum;  // ----- Nesta linha deve-se colocar o Titulo
  cout << Comum;
  cout << Meio;   // ----- Divisao do Titulo
  for (i=1; i<=(alt-8); i++)
    cout << Comum;// << endl;
  cout << Meio;   // ----- Divisao da linha de Status
  cout << Comum;
  cout << Baixo;
}

// --------------- Funcao mostra menu na tela
int menu(void) {
  int resp=0;
  while ((resp<1) || (resp>5)) {
    moldura();
    gotoxy(14,3);  cout << "Lista simplesmente Encadeada sobre vetor estatico";
    gotoxy(28,7);  cout << "1 - Incluir elemento";
    gotoxy(28,8);  cout << "2 - Excluir elemento";
    gotoxy(28,9);  cout << "3 - Mostrar toda a Lista";
    gotoxy(28,10); cout << "4 - Limpar a Lista";
    gotoxy(28,11); cout << "5 - Sair";
    gotoxy(28,13); cout << "Opcao: ";
    cin >> resp;
    if ((resp<1) || (resp>5)) {
      gotoxy(3, (alt-1)); cout << "Opcao Invalida";
      apito();
    } // ----- if ((resp<1) || (resp>5))
  } // ----- while ((resp<1) || (resp>5))
  return resp;
} // ----- menu()

Thankyou a lot

Edited 4 Years Ago by Narue: Added code tags

Here.
59 `livre' undeclared (first use this function)
61 `ult' undeclared (first use this function)
73 `prim' undeclared (first use this function)
78 conversion from `nodo*' to non-scalar type `nodo' requested
85 conversion from `nodo*' to non-scalar type `nodo' requested
99 cannot convert `nodo' to `nodo*' in assignment
122 `prim' undeclared (first use this function)
127 `livre' undeclared (first use this function)
128 `ult' undeclared (first use this function)
160 `ult' undeclared (first use this function)
171 expected primary-expression before "int"
171 expected `;' before "int"

Well they are kind of obvious...
Let's start from the bottom:

  • void delete_list() {
      nodo* point = ult;
      while (point!=NULL) {
        nodo* p;
        p=point;
        point=p->ant;
        ult=point->ant;
        delete p;
    }

    You're missing a semicolon here.

  • nodo search_nodo (int n) { // ----- Função procura nodo com valor n e retorna 
      nodo* p = prim;         //       endereço do nodo.  
      nodo* p2;
      //...
      //...
            return p2;
            }
        }
      } while (p->data!=n);
    } // search_nodo();

    You return a pointer, so your function should be declared as nodo* search_nodo(int) . There are some other similar errors, do that for all the functions that return a pointer.

  • You don't seem to declare the variables you use (such as livre) anywhere...
    (hint: nodo* livre in function create_list can't be seen in any other function, as well as the other variables in it. To use it globally, you have to declare it and initialise it outside a function.)

It Still having one error. in line 173 --->

int main () { ...
Declaration Sintax Error.

What can I Do?

Edited 3 Years Ago by pyTony: fixed formating

As I observe you have a spare semicolon in line 195 (where main ends). But I'm not sure this is quite the problem in this case (although the semicolon should be erased if it hasn't been by now). Would you mind posting the newer version of your code?

This article has been dead for over six months. Start a new discussion instead.