Kiwanax Postado Setembro 8, 2009 Denunciar Share Postado Setembro 8, 2009 (editado) 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 Setembro 8, 2009 por Jonathan Queiroz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Setembro 8, 2009 Denunciar Share Postado Setembro 8, 2009 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kiwanax Postado Setembro 8, 2009 Autor Denunciar Share Postado Setembro 8, 2009 Mnemonic, obrigado.O erro era mesmo naquele casting no construtor da classe!Agradecido!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Kiwanax
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:
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 QueirozLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.