Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vhbsouza

[Resolvido] Lista Encadeada em C++

Recommended Posts

Olá Galera, tudo bem?

 

Estou precisando de ajuda pra compilar um programa,

teoricamente está certo, pois testei inúmeras vezes e nao consigo encontrar problema algum!

 

Eu implementei uma Lista Simples em C++ usando classe...

 

Quando vou compilar aparece o seguinte erro:

 

D:\Documents\Projetos\C-C++\ED\ED - Lista Simples\main.cpp||In member function `int Lista<tipo>::remove(tipo) [with tipo = int]':|

D:\Documents\Projetos\C-C++\ED\ED - Lista Simples\main.cpp|124|instantiated from here|

D:\Documents\Projetos\C-C++\ED\ED - Lista Simples\main.cpp|75|error: 'class No<int>' has no member named 'elem'|

D:\Documents\Projetos\C-C++\ED\ED - Lista Simples\main.cpp|80|error: 'class No<int>' has no member named 'elem'|

||=== Build finished: 2 errors, 0 warnings ===|

 

Meu código é esse:

 

#include <iostream>

using namespace std;

template <class tipo>
class No{
    public:
        tipo info;
        No <tipo> *prox;
        No(tipo elem, No <tipo> *p);
};

template <class tipo>
class Lista{
    private:
        No <tipo> *inicio;
    public:
        Lista();
        ~Lista();
        void insert(tipo elem);
        int remove(tipo elem);
        int empty();
};

template <class tipo>
No <tipo> :: No(tipo elem, No <tipo> *p){
    info=elem;
    prox=p;
}

template <class tipo>
Lista <tipo> :: Lista() {inicio=NULL;}

template <class tipo>
int Lista <tipo> :: empty(){
    if(!inicio)
        return 1;
    else
        return 0;
};

template <class tipo>
void Lista <tipo> :: insert(tipo elem){
    No <tipo> *ant=NULL, *atual,*novo;
    novo = new No <tipo>(elem, NULL);

    if(empty())
        inicio=novo;
    else{
        atual=inicio;
        while(atual!=NULL && atual->info <= elem){
            ant=atual;
            atual=atual->prox;
        }
        if(ant==NULL){//inicio
            novo->prox=inicio;
            inicio=novo;
        }
        else{//meio ou fim
            ant->prox=novo;
            novo->prox=atual;
        }
    }
}

template <class tipo>
int Lista <tipo> :: remove(tipo elem){
    No <tipo> *ant=NULL,*atual;

    if(empty())
        return -1;
    else{
        atual = inicio;

        while( atual && (atual->elem < elem)){
            ant=atual;
            atual=atual->prox;
        }

        if(atual!=NULL && atual->elem == elem){
            if(ant==NULL)//inicio
                inicio=atual->prox;
            else//meio ou fim
                ant->prox=atual->prox;
            delete atual;
            return 0;
        }
        else
            return 1; //nao existe
    }
}//FIM

template <class tipo>
Lista <tipo> :: ~Lista(){
    No <tipo> *p;

    while(inicio!=NULL){
        p=inicio;
        inicio=inicio->prox;
        delete p;
    }
}


int main()
{
    char opcao = 'a';
    int num, retorno;

    Lista <int> L;
    cout << "Informe opcao [I]nserir [R]emover [S]air:";

    cin >> opcao;

    while(opcao != 's'){
        cout << "Digite numero: ";
        cin >> num;

        switch (opcao){
            case 'i':
                L.insert(num);
                break;
            case 'r':
                retorno = L.remove(num);
                if(retorno == -1)
                    cout << "Lista Vazia" << endl;
                else{
                    if(retorno == 0)
                        cout << "Remocao Realizada." << endl;
                    else
                        cout << "Numero Nao Existe." << endl;
                    break;
                }
            default:
                cout << "Opcao Inexistente" << endl;
                break;
        }
        cout << "Informe Opcao..." << endl;
        cin >> opcao;
    }
    L.~Lista();
    return 0;
}

Vocês podem me ajudar?

 

Abraço :D

 

@vhbsouza

Compartilhar este post


Link para o post
Compartilhar em outros sites
Estou precisando de ajuda pra compilar um programa,

teoricamente está certo, pois testei inúmeras vezes e nao consigo encontrar problema algum!

 

Se está dando erro em tempo de compilação, não está certo.

 

p1.cpp:75: error: ‘class No<int>’ has no member named ‘elem’

p1.cpp:80: error: ‘class No<int>’ has no member named ‘elem’

 

O erro é bem auto-explicativo. Você está vendo em algum lugar desse código um campo de nome 'elem' na classe No?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou precisando de ajuda pra compilar um programa,

teoricamente está certo, pois testei inúmeras vezes e nao consigo encontrar problema algum!

Se está dando erro em tempo de compilação, não está certo.

 

p1.cpp:75: error: ‘class No<int>’ has no member named ‘elem’

p1.cpp:80: error: ‘class No<int>’ has no member named ‘elem’

 

O erro é bem auto-explicativo. Você está vendo em algum lugar desse código um campo de nome 'elem' na classe No?

 

 

Valeu Isis,

Eu estava confundindo as coisas, eu tenho uma variável de nome 'elem' no construtor do nó e não na estrutura da classe!

Fiz confusão.

 

Eu troquei 'elem' por 'info' porque eu quero comparar os valores pra remover e deu certo!

 

Problema solucionado!

 

Muito Obrigado :D

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.