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
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?
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?