I made a code in c ++ that works if it's all inside main.cpp. When I create other files, such as a header it gives the undefined reference error. I've done everything and only managed to make it work with a single source file. Can you help me ? Also, the bool type is undefined. Here it works because everything is in the same file. this was my main file.
#include<iostream>
#include "DeclararMetodo.h"
using namespace std;
int main()
{
menuDeOpcoes();
return 0;
}
o arquivo com as funcoes declaradas
#define TAM 4
struct lista{
int ult;
int valor[TAM];
};
void inserirInicio (lista *lis,int n);
void removerInicio (lista *lis,int n);
void removePosicao(lista *lis, int pos);
void removeValor(lista *lis, int valor);
void inverte(lista *lis);
int pesqseq(lista *lis, int n);
int pesqbin(lista *lis, int n);
void ordenaAsc (lista *lis);
void ordenaDesc (lista *lis);
void consultalista(lista *lis);
void removeFinal(lista *lis);
int consultaNumElelista (lista *lis);
int consultaUltimo (lista *lis);
void insereFinal(lista *lis, int valorIns);
void crialista(lista *lis);
void menuDeOpcoes ();
bool listaVazia(lista *lis){
if(lis->ult == -1){
return true;
}
return false;
};
bool listaCheia(lista *lis){
if(lis->ult == TAM -1){
return true;
}
return false;
};
aqui as funcoes sendo escritas
void insereInicio(lista *lis,int n){
if (listaCheia(lis)){
cout << "Lista cheia" << endl;
}else{
lis->ult++;
for (int i=lis->ult;i>0;i--){
lis->valor[i]=lis->valor[i-1];
}
}
lis->valor[0]=n;
}
int consultaNumElelista (lista *lis){
if (listaVazia(lis)==false){
cout << "Lista nao criada" <<endl;
}else{
cout << lis->ult+1;
}
}
int consultaUltimo (lista *lis){
return lis->valor[lis->ult];
}
//primeiro método a ser executado, cria a lista com o valor -1
void criaLista(lista *lis){
lis->ult = -1;
cout << "Lista criada" <<endl;
}
//verifica se a lista está vazia
bool listaVazia(lista *lis){
if(lis->ult == -1){
return true;
}
return false;
}
//verifica se a lista está cheia
bool listaCheia(lista *lis){
if(lis->ult == TAM -1){
return true;
}
return false;
}
//insere o elemento passado por parâmetro no final da lista
void insereFinal(lista *lis, int valorIns){
if(listaCheia(lis)){
cout << "Nao é possivel inserir no final pois a lista esta cheia." << endl;
return;
}
//incrementa 1 à variável que mantém o valor do último elemento
lis->ult++;
//insere o elemento no final da lista
lis->valor[ lis->ult ] = valorIns;
}
//remove um elemento do final
void removeFinal(lista *lis){
if(listaVazia(lis)){
cout << "Nao é possivel remover um elemento do final pois a lista esta vazia." << endl;
return;
}
//apenas decrementando 1 ao último elemento não será mais possível acessar esta posição
lis->ult--;
}
//consulta todos os elemento da lista, apresentando os valores inseridos
void consultaLista(lista *lis){
if(listaVazia(lis)){
cout << "Nao é possivel consultar pois a lista esta vazia." << endl;
return;
}
//percorre todos os elementos da lista a partir do início apresentando os valores inseridos
for(int i = 0; i <= lis->ult; i++){
cout << "Valor [" << i << "]: " << lis->valor[i] << endl;
}
}
//remove um elemento de uma determinada posição
void menuDeOpcoes(){
lista lis;
int valor;
char cod;
int codigo = -1;
while(codigo != 0){
cout << "--- INFORME UMA DAS OPCOES ABAIXO ---" << endl;
cout << "a - remover elemento a partir de um numero" <<endl;
cout << "b - invereter" <<endl;
cout << "c - Inverter lista" << endl;
cout << "1 - Criar" << endl;
cout << "2 - Inserir pelo final" << endl;
cout << "3 - Remover pelo final" << endl;
cout << "4 - Consultar todos" << endl;
cout << "5 - Consultar quantos elementos foram inseridos"<<endl;
cout << "6 - Consultar o ultimo elemento inserido na lista"<<endl;
cout << "7 - Inserir pelo inicio "<<endl;
cout << "8 - Remover pelo inicio "<<endl;
cout << "9 - Remover pela posicao "<<endl;
cout << "0 - Sair" << endl;
cout << "Informe a opcao: ";
cin >> codigo;
switch(codigo){
case 'a':
cout << "Insira um numero: ";
cin >> valor;
removeValor(&lis,valor);
break;
case 11:
cout << "Invertendo a lista ... ";
system ("clear");
cout <<"Lista invertida" << endl;
inverte(&lis);
case 0:
break;
case 1:
criaLista(&lis);
break;
case 2:
cout << "Informe o valor a ser inserido: ";
cin >> valor;
insereFinal(&lis,valor);system ("clear");
break;
case 3:
removeFinal(&lis);system ("clear");
break;
case 4:
consultaLista(&lis);
break;
case 5:
consultaNumElelista(&lis);
break;
case 6: consultaLista(&lis);
break;
case 7:
cout << "Insira o valor ";
cin >> valor;
insereInicio(&lis,valor);
break;
case 8:
removeInicio(&lis);
break;
case 9:
cout << "Insira a posicao que deseja apagar ";
cin >> valor;
removePosicao(&lis,valor);
default:
cout << "A opcao escolhida e invalida" << endl;
}
}//end while
If you can give tips on how to separate the files, what kind of functions should be in the same file as the other, which ones I would appreciate.