Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Templates de List - Erros


Kiwanax

Pergunta

Olá, pessoal do Fórum Script!

Tudo bem?

Estou com umas dúvidas aqui. Gostaria que, se possível, me ajudassem!

Lá vai:

Eis o código o qual estou criando:

template<class T>
class List {

   protected:

      class Node {
         public:
            Node * pAnt;
            T item;
            Node * pProx;
         public:
            Node() : pAnt (0), pProx (0) {}
      };

   private:

      Node * firstNode;
      Node * lastNode;
      int    listSize;

   public:

      List() {

         this->firstNode           = new Node();
         this->firstNode->item =  (T) new int(-1);
         this->firstNode->pProx    = firstNode;
         this->firstNode->pAnt     = firstNode;

         listSize = 0;
      }

      ~List() {

         delete(firstNode);
         listSize = -1;
      }

      void Add(const T& item) {

         this->lastNode               = new Node();
         this->lastNode->nodeItem     = item;
         this->firstNode->pAnt->pProx = this->lastNode;
         this->lastNode->pAnt         = this->firstNode->pAnt;
         this->firstNode->pAnt        = this->lastNode;

         this->listSize++;
      }
      

      T ElementAt(int position) {
         Node * aux;

         try {

             aux = this->firstNode->pProx;
             
             for (int I = 0; I < position; ++I) {
             
                aux = aux->pProx;    
             }
             
             return aux;
         }
         catch (int sizeList) {
             return NULL;
         }
      }
      
      T RemoveAt(int position) {
         Node * aux;

         try {

             aux = this->firstNode->pProx;
             
             for (int I = 0; I < position; ++I) {
             
                aux = aux->pProx;    
             }
             
             aux->pAnt->pProx = aux->pProx;
             aux->pProx->pAnt = aux->pAnt;
             delete(aux);
         }
         catch (int sizeList) {
             return NULL;
         }
      }
      
      void RemoveAll() {
      
         this->firstNode->pProx = this->firstNode;
         this->lastNode = this->firstNode;
      }
};

class Customer {  
public:  
    string name;  
    double code;  
public:  
    Customer () : name(0), code(0) {}  
    Customer (string pName, double pCode) : name(pName), code(pCode) { }  
    Customer (const Customer& other) : name(other.name), code(other.code) { }  
    string toString() { return name; }  
};  
  
int main (int argc, char*argv[])   
{  
    List<Customer> customers;  
    customers.Add(Customer ("Abdias", 100));  
    customers.Add(Customer ("Moises", 200));
     
    Customer c = customers.ElementAt(0);
    cout << c.name << " - " << c.code << endl;

    return 0;  
}

Bom, estou criando um template para listas genéricas. Para simplificar a vida mais pra frente.

Criei uma classe Customer para teste da minha classe List.

Surgiram duas dúvidas, a partir daí:

1) Me ocorre um erro na declaração da list, no main.

List<Customer> customers;

Eis o erro:

C:\Documents and Settings\Nicolas\Desktop\c++\main.cpp In constructor `List<T>::List() [with T = Customer]':

163 - instantiated from here

O que pode ter acontecido?

2) Tentei jogar o meu template num arquivo .h, mas o mesmo não é reconhecido na classe main. Por que isso?

Desde já, agradecido pela atenção de todos!

Editado por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Os erros que eu suspeito são esses:

this->firstNode->item     = (T) new int(-1);
Nessa linha é como se você tivesse chamando um construtor pro tipo T que recebe um int como parametro, mas ele não existe.
void Add(const T& item) {
         this->lastNode               = new Node();
         this->lastNode->nodeItem     = item;
acho que você colocou aquele "nodeItem" sem querer alí. Deveriam ser apenas Item.
T ElementAt(int position) {
         Node * aux;

         try {
             aux = this->firstNode->pProx;
             for (int I = 0; I < position; ++I)
                aux = aux->pProx;    
             return aux;

Essa função é do tipo T, mas você tá tentando retornar um Node*.

Minha sugestão é que seja criado um templade apenas pra classe Node

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...