Pessoal, como vai?
Estou fazendo um projeto (trabalho grande ) para a faculdade que é sobre um Sistema de Gerenciamento de uma biblioteca Eletrônica. Na verdade ele só simula…
O meu problema consiste em uma lista que eu fiz para guardar os Usuarios registrados no sistema e que funciona perfeitamente para os tipos básicos (int, double, char, etc…).
Mas quando eu uso o tipo Usuário(uma classe criado por mim que contem id, password, etc…) acontece um erro… Na verdade são três erros que não achei a fonte.
Farei o seguinte: postarei aqui o código ( da lista, usuário e da classe Login que é a que ta dando pau ) que é meio grande; e enquanto vocês me ajudam, eu vou terminando as outras
classes.
Mais uma dúvida… Se eu fizer uma árvore ( já fiz ) de Usuário, eu posso guardar nela o tipo professor, ou o tipo aluno ou mesmo admin? Um admin é um
professor, um professor é um aluno e um aluno é um Usuario. (conceito de herança.)
ps: desconfio que o problema seja no Template. Porque o compilador parece que nao reconhece usuario como classe…
Ficarei muito grato caso descubram o erro. Obrigado.
lá vai o código(parte dele):
//ARQUIVO ESTRUTURAS.CPP
#include "header.h"
//LISTA
template<class T>
void Lista<T>::inserehead(T &x) {
node<T> *p;
p = new node<T> ();
p->setdado(x);
if (n == 0) {
head = p;
tail = p;
p->setprox(NULL);
p->setant(NULL);
} else {
p->setant(head);
head->setprox(p);
head = p;
}
set_n(get_n() + 1);
}
template<class T>
void Lista<T>::inseretail(T &x) {
node<T> *p;
p = new node<T> ();
p->setdado(x);
if (n == 0) {
head = p;
tail = p;
p->setprox(NULL);
p->setant(NULL);
} else {
p->setprox(tail);
tail->setant(p);
tail = p;
}
set_n(get_n() + 1);
}
template<class T>
void Lista<T>::print() {
node<T> *p;
if (head == NULL)
cout << "Lista vazia!";
p = tail;
while (p->getprox() != NULL) {
cout << " " << p->getdata().get_id();
p = p->getprox();
}
cout << " " << p->getdata().get_id();
}
template<class T>
void Lista<T>::inseremeio(T &x, unsigned n) {
unsigned i = 1;
node<T> *p, *k;
p = tail;
if (n > get_n() + 1) {
cout << "ERRO, Nao pode inserir elemento nessa posicao!!";
fflush(stdin);
getchar();
exit(1);
} else if (n == get_n() + 1)
inserehead(x);
else if (n == 1)
inseretail(x);
else {
while (i < n) {
p = p->getprox();
i++;
}
k = new node<T> ();
k->setdado(x);
k->setant(p->getant());
k->setprox(p);
p->setant(k);
k->getant()->setprox(k);
set_n(get_n() + 1);
}
}
template<class T>
T Lista<T>::acesso(unsigned n) {
int i = 0;
node<T> *p;
p = tail;
if (n == 1)
return tail->getdata();
else if (n == get_n())
return head->getdata();
while (i < n - 1) {
p = p->getprox();
i++;
}
return p->getdata();
}
template<class T>
void Lista<T>::removemeio(unsigned n) {
unsigned i = 1;
node<T> *p;
p = tail;
if (n > get_n() + 1 || get_n() == 0) {
cout
<< "ERRO, Nao pode remover elemento nessa posicao OU LISTA VAZIA!!";
fflush(stdin);
getchar();
} else if (n == get_n() + 1)
removehead();
else if (n == 1)
removetail();
else {
while (i < n) {
p = p->getprox();
i++;
}
p->getant()->setprox(p->getprox());
p->getprox()->setant(p->getant());
delete (p);
set_n(get_n() - 1);
}
}
template<class T>
void Lista<T>::removehead() {
node<T> *p;
p = head;
if (get_n() == 0) {
cout << "ERRO, LISTA VAZIA!";
fflush(stdin);
getchar();
} else if (get_n() == 1) {
sethead(NULL);
settail(NULL);
delete (p);
set_n(get_n() - 1);
} else {
p->getant()->setprox(NULL);
sethead(p->getant());
delete (p);
set_n(get_n() - 1);
}
}
template<class T>
void Lista<T>::removetail() {
node<T> *p;
p = tail;
if (get_n() == 0) {
cout << "ERRO, LISTA VAZIA!";
fflush(stdin);
getchar();
} else {
p->getprox()->setant(NULL);
settail(p->getprox());
delete (p);
set_n(get_n() - 1);
}
}
Arquivo header.cpp (classe LOGIN DANDO ERRO!!! Comentei no local…
#include <iostream>
#include <string.h>
using namespace std;
//USUARIO!!!!!!!!!!
class Usuario {
public:
Usuario();//construtor padr?o
Usuario(string, string, string);
void download(Acervo&);
string get_id() const {
return id;
}
string get_pass() const {
return pass;
}
string get_nome() const {
return nome;
}
private:
string id;
string pass;
string nome;
int downloads;
};
//LOGIN!!!
class Login {
public:
Login() {
user = NULL;
}
bool log();//Implementar na classes.cpp
Usuario get_user(int n) {
return banco_user.acesso(n); //ERRO DANDO AQUI!!!
}
Usuario* get_current() {
return user;
}
void set_user(Usuario *x) {
banco_user.inserehead(*x);// OUTRO ERRO AQUI!!!!
}
void logoff() {
user = NULL;
}
private:
Lista <Usuario> banco_user; //ERRO AQUI!!!
Usuario* user;
};
Os erros são os seguintes:
**** Build of configuration Debug for project DOOLPI ****
make all
Building file: …/main.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "…/main.cpp"
In file included from …/main.cpp:1:
…/header.h:81: error: ISO C++ forbids declaration of ‘Lista’ with no type
…/header.h:81: error: expected ‘;’ before ‘<’ token
…/header.h: In member function ‘Usuario Login::get_user(int)’:
…/header.h:67: error: ‘banco_user’ was not declared in this scope
…/header.h: In member function ‘void Login::set_user(Usuario*)’:
…/header.h:73: error: ‘banco_user’ was not declared in this scope
make: *** [main.o] Error 1