warkold Postado Junho 30, 2010 Denunciar Share Postado Junho 30, 2010 (editado) Banco.h#ifndef _CLIENTE_H_ #define _CLIENTE_H_ #include "Cliente.h" class Banco { private: char NomeBanco[40]; int NumeroClientes; Cliente *pPrim; Cliente *PUlt; public: void setNome(char *n); char* getNome(); void InsereCliente(Cliente* cl,float quantia); int PermitirSaque(int NumeroConta,float quantia); }; #endif Cliente.h #ifndef _GERENTE_H_ #define _GERENTE_H_ #include "Gerente.h" #include "Pessoa.h" class Cliente: public Pessoa { private: float SaldoC; int NumeroConta; Gerente *p; public: Cliente *pProx; Cliente(int c,int d,int m,int a,char* n=""); Cliente(); ~Cliente(); void setGerente(Gerente *pnc); char getNome(); int setNumero(int numero); void setSaldo(int valor); float getSaldo(); void FazerSaque(float quantia); }; #endifERROR ISO C++ forbids declaration of `Cliente' with no type Ele não está reconhecendo a classe cliente.Aí não da pra fazer a lista encadeada.Compilador: Dev-c++ 4.9.9.2 Editado Julho 1, 2010 por warkold Remover palavra "ajuda" do título conforme regra 3.6 (Jonathan) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 webpantoja Postado Junho 30, 2010 Denunciar Share Postado Junho 30, 2010 Cara, posta aí as outras classes para ficar melhor a visualização do problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 1, 2010 Autor Denunciar Share Postado Julho 1, 2010 (editado) Gerente.h#ifndef _GERENTE_H_ #define _GERENTE_H_ #include "Banco.h" #include "Pessoa.h" class Gerente: public Pessoa{ private: Banco *p; //ponteiro para objeto banco public: Gerente(); ~Gerente(); Gerente(int c,int d,int m,int a,char* n=""); void setBanco(Banco* bc); float ConcederLimite(int idadeP); }; #endif Pessoa.h #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa{ private: char nomeP[40]; int CPFP; int diaP; int mesP; int anoP; int idadeP; public: Pessoa(int c,int d,int m,int a,char *n=""); Pessoa(); ~Pessoa(); void calc_idade(int diaT,int mesT,int anoT); int getidade(); }; #endif Principal.h #include "Banco.h" #include "Cliente.h" #include "Pessoa.h" #include "Gerente.h" class Principal { private: Banco Brasil; Gerente Marco; Cliente Ronaldo; Cliente Jose; int dia; int mes; int ano; public: Principal(); ~Principal(); void Inicializa(); void CalcIdadeClients(); void Executar(); }; Editado Julho 1, 2010 por warkold Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mvrocha Postado Julho 1, 2010 Denunciar Share Postado Julho 1, 2010 Tem nome no #define errado, veja bem :na definicao da class Gerente ele define _GERENTE_H_na definicao da class Banco ele define _CLIENTE_H_na definicao da class CLIENTE ele tenta define _GERENTE_H_ , que já esta definido assim desprezando a classe CLIENTESo troca os nomes e na proxima toma cuidado com copy-paste <_< espero ter ajudadomvrocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 1, 2010 Autor Denunciar Share Postado Julho 1, 2010 Cara, creio que fiz tudo o que você pediu,porém da outro problema. ISO C++ forbids declaration of `Gerente' with no type Coloquei na classe banco # define _BANCO_H_classe cliente #define _CLIENTE_H_classe gerente #define _GERENTE_H_classe pessoa #define _PESSOA_H_ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 webpantoja Postado Julho 1, 2010 Denunciar Share Postado Julho 1, 2010 Warkold,Agora que você postou tudo melhorou!Além das observações do mvrocha, faltou você declarar também os metodos construtores e destrutores da Classe Banco, já que ele vai ser um objeto.Testa aí e vê se funciona.Att,WebPantoja Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 1, 2010 Autor Denunciar Share Postado Julho 1, 2010 Rapaz, coloquei a construtora e destrutora mas não deu ainda . !_! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 1, 2010 Denunciar Share Postado Julho 1, 2010 Poderia postar o código de todos os arquivos com o nome?Exemplo:cliente.h...Eu fiz um teste com os códigos que você postou acima (apenas alterando os #defines) e funcionou, acho que você esqueceu de fazer alguma mudança no #define. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 1, 2010 Autor Denunciar Share Postado Julho 1, 2010 Cara, já coloquei o nome de cada arquivo nos primeiros posts.Tem como você me passar o código corrigido?Obrigadão ai Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 1, 2010 Denunciar Share Postado Julho 1, 2010 O código que utilizei para testar ficou assim, mas é possível que eu tenha cometido algum erro por não saber para que servia cada arquivo:Removi os códigos porque não tinha copiado corretamente.Edit:Descobri o que fiz errado, coloquei principal.cpp ao invés de principal.h. O problema aparenta ser uma dependência circular:A classe Gerente depende de Banco.Banco depende de Cliente.Cliente depende de Gerente e de Pessoa.Dessa forma, quando o arquivo cliente.h é incluído, ele chama novamente Gerente e o compilador cancela a inclusão automaticamente. Isso ocorre antes da definição da classe Banco, como você pode ver:#ifndef _BANCO_H_ #define _BANCO_H_ #include "Cliente.h" //incluímos "cliente.h" antes de definir "Banco" class Banco //definimos banco aqui { ... }; #endif Ou seja, a inclusão é cancelada sem que a classe "Banco" seja sequer definida. Como, na classe Gerente, você apenas declarou um ponteiro para a classe Banco, não é necessário ter sua definição (para o compilador, basta informar que ela "existe"). E isso pode ser feito da seguinte forma: class Banco; Ao fazer isso, podemos evitar a inclusão de banco.h. O código do arquivo Gerente.h fica assim: #ifndef _GERENTE_H_ #define _GERENTE_H_ #include "Pessoa.h" class Banco; class Gerente: public Pessoa{ ... }; #endifIsso minimiza a dependência entre as classes. O mesmo deve ser feito para outras classes onde não é necessário ter sua definição (por exemplo, a classe Banco não depende de Cliente, também seria interessante alterar seu código-fonte).Poste aí se resolveu ou não o problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 1, 2010 Autor Denunciar Share Postado Julho 1, 2010 Cara, fiz isso e deu vários errors. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 1, 2010 Denunciar Share Postado Julho 1, 2010 Você só alterou a classe banco.h? Se possível poste como ficou o código. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 1, 2010 Autor Denunciar Share Postado Julho 1, 2010 (editado) #ifndef _BANCO_H_ #define _BANCO_H_ #include "Cliente.h" class Banco { private: char NomeBanco[40]; int NumeroClientes; Cliente *pPrim; Cliente *PUlt; public: Banco(); ~Banco(); void setNome(char *n); char* getNome(); void InsereCliente(Cliente* cl,float quantia); int PermitirSaque(int NumeroConta,float quantia); }; #endif Editado Julho 1, 2010 por warkold Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 2, 2010 Denunciar Share Postado Julho 2, 2010 Desculpe, pedi o arquivo errado. Poderia enviar o arquivo gerente.h? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 warkold Postado Julho 2, 2010 Autor Denunciar Share Postado Julho 2, 2010 #ifndef _GERENTE_H_ #define _GERENTE_H_ #include "Pessoa.h" class Banco; class Gerente: public Pessoa{ private: Banco *p; //ponteiro para objeto banco public: Gerente(); ~Gerente(); Gerente(int c,int d,int m,int a,char* n=""); void setBanco(Banco* bc); float ConcederLimite(int idadeP); }; #endif Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 2, 2010 Denunciar Share Postado Julho 2, 2010 Fiz as alterações e o código funcionou perfeitamente. Você está incluindo os headers no arquivo de implementação (.cpp)? No gerente.h não é necessário incluir o arquivo banco.h, mas no gerente.cpp será necessário. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
warkold
Banco.h
Cliente.hERROR ISO C++ forbids declaration of `Cliente' with no type
Ele não está reconhecendo a classe cliente.Aí não da pra fazer a lista encadeada.
Compilador: Dev-c++ 4.9.9.2
Editado por warkoldRemover palavra "ajuda" do título conforme regra 3.6 (Jonathan)
Link para o comentário
Compartilhar em outros sites
15 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.