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

Problemas no reconhecimento de classes


warkold

Pergunta

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);
};

#endif

ERROR 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 warkold
Remover 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

  • 0

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 por warkold
Link para o comentário
Compartilhar em outros sites

  • 0

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 CLIENTE

So troca os nomes e na proxima toma cuidado com copy-paste <_<

espero ter ajudado

mvrocha

Link para o comentário
Compartilhar em outros sites

  • 0

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_

Link para o comentário
Compartilhar em outros sites

  • 0

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{
...
};
#endif

Isso 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.

Link para o comentário
Compartilhar em outros sites

  • 0
#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 por warkold
Link para o comentário
Compartilhar em outros sites

  • 0
#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

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,4k
×
×
  • Criar Novo...