Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Akumadie en 28 Noviembre 2016, 13:22 pm



Título: Ayuda: pasar por parametro de un metodo a una clase
Publicado por: Akumadie en 28 Noviembre 2016, 13:22 pm
Estoy tratando de crear una clase abstracta, para luego heredarlo a una clase derivada.
El codigo es el siguiente:

El archivo "ICuenta.h"

Código
  1. #pragma once
  2. #include<string>
  3. #include <iostream>
  4. #include <list>
  5. #include "Cliente.h"
  6.  
  7. class ICuenta
  8. {
  9. std::string Nombre;
  10. double Saldo;
  11.  
  12. public:
  13. virtual void Extraer(double) = 0;
  14. virtual void Depositar(double) = 0;
  15. virtual void Transferir(Cuenta, double) = 0;
  16. };
  17.  
  18.  
  19. class Cuenta : public ICuenta
  20. {
  21. private:
  22. list<Cliente> cliente;
  23.  
  24. public:
  25. Cuenta();
  26. ~Cuenta();
  27.  
  28. void Extraer(double);
  29. void Depositar(double);
  30. void Transferir(Cuenta, double);
  31. void AgregarCliente();
  32. void EliminarCliente();
  33. };
  34.  


el archivo cpp:
Código
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "ICuenta.h"
  4.  
  5.  
  6. Cuenta::Cuenta() {};
  7. Cuenta::~Cuenta() {};
  8.  
  9. void Cuenta::Extraer(double) {};
  10. void Cuenta::Depositar(double) {};
  11. void Cuenta::Transferir(Cuenta, double) {};
  12. void Cuenta::AgregarCliente() {};
  13. void Cuenta::EliminarCliente() {};
  14.  
  15.  

Aparentemente el problema esta en el metodo "virtual void Transferir(Cuenta, double)". Necesito pasar por parametro a otro objeto Cuenta para hacer una transferencia.
El error que me pone es:

 sytanx error "Identifier 'Cuenta.'  en el ICuenta.h
y
Cuenta cannot instantiate abstract class en el ICuenta.cpp

Ayuda por favor




Título: Re: Ayuda: pasar por parametro de un metodo a una clase
Publicado por: ivancea96 en 29 Noviembre 2016, 15:55 pm
Código
  1. virtual void Transferir(Cuenta, double) = 0;

Dentro de ICuenta estás utilizando una clase (Cuenta) que no ha sido declarada aun.
Querrías poner:
Código
  1. virtual void Transferir(ICuenta*, double) = 0;
Si es así, solo sería poner eso (teniendo en cuenta que debes poner o puntero o referencia (&).

Si realmente quieres utilizar Cuenta, entonces pon antes de ICuenta:
Código
  1. class Cuenta;
  2.  
  3. class ICuenta
  4. {
  5. std::string Nombre;
  6. double Saldo;
  7.  
  8. public:
  9. virtual void Extraer(double) = 0;
  10. virtual void Depositar(double) = 0;
  11. virtual void Transferir(Cuenta, double) = 0;
  12. };
Así, el compilador sabe que existe esa clase (aunque no sepa nada de ella).