Ayuda: pasar por parametro de un metodo a una clase

Iniciado por Akumadie, 28 Noviembre 2016, 13:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Akumadie

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 (cpp) [Seleccionar]

#pragma once
#include<string>
#include <iostream>
#include <list>
#include "Cliente.h"

class ICuenta
{
std::string Nombre;
double Saldo;

public:
virtual void Extraer(double) = 0;
virtual void Depositar(double) = 0;
virtual void Transferir(Cuenta, double) = 0;
};


class Cuenta : public ICuenta
{
private:
list<Cliente> cliente;

public:
Cuenta();
~Cuenta();

void Extraer(double);
void Depositar(double);
void Transferir(Cuenta, double);
void AgregarCliente();
void EliminarCliente();
};



el archivo cpp:
Código (cpp) [Seleccionar]

#pragma once
#include "stdafx.h"
#include "ICuenta.h"


Cuenta::Cuenta() {};
Cuenta::~Cuenta() {};

void Cuenta::Extraer(double) {};
void Cuenta::Depositar(double) {};
void Cuenta::Transferir(Cuenta, double) {};
void Cuenta::AgregarCliente() {};
void Cuenta::EliminarCliente() {};



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



ivancea96

Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
class Cuenta;

class ICuenta
{
std::string Nombre;
double Saldo;

public:
virtual void Extraer(double) = 0;
virtual void Depositar(double) = 0;
virtual void Transferir(Cuenta, double) = 0;
};

Así, el compilador sabe que existe esa clase (aunque no sepa nada de ella).