Hola, ¿que tal? este es mi primer mensaje en el foro. necesito ayuda para un programa que estoy haciendo. uso el compilador dev - C++ .
al compilar el programa me da un error, y trate de hacer varias modificaciones pero sigue pasando lo mismo.
hasta el momento los metodos que probe andan bien, pero falla el metodo agregardisco de la clase coleccion. agradezco una respuesta
saludos
Clase Fecha :
fecha.h :
#ifndef FECHA_H
#define FECHA_H
#include <iostream>
#include <cstdlib>
using namespace std;
class Fecha
{
public:
Fecha(int=1,int=1,int=2007);
~Fecha();
void imprimefecha()const;
int getdia()const;
int getmes()const;
int getanio()const;
void setdia(int);
void setmes(int);
void setanio(int);
void setfecha(int,int,int);
private:
int dia;
int mes;
int anio;
};
#endif
fecha.cpp
#include "Fecha.h"
Fecha::Fecha(int d,int m,int a)
{
setfecha(d,m,a);
}
Fecha::~Fecha()
{
}
void Fecha::setfecha(int d,int m,int a)
{
setdia(d);
setmes(m);
setanio(a);
}
void Fecha::setanio(int a)
{
if((a>1900) && (a< 2200))
{
anio=a;
}
else
{
anio=2007;
}
}
void Fecha::setmes(int m)
{
if((m>=0) && (m<13) )
{
mes=m;
}
else
{
mes=1;
}
}
void Fecha::setdia(int d)
{
// verificardia(d) crearia una funcion para verificar que el dia ingresado es correcto
//de no serlo, por defecto el dia seria 1. tambien verificaria
//que el año sea o no bisiesto, para saber si corresponde
//en febrero almacenar un dia 29 o no
//no creé esta funcion, por motivos de complejidad y que
//se desvian del objetivo principal del programa, que es
//practicar composicion
dia=d;
}
int Fecha::getanio()const
{
return anio;
}
int Fecha::getmes()const
{
return mes;
}
int Fecha::getdia()const
{
return dia;
}
void Fecha::imprimefecha()const
{
cout<<dia<<"/"<<mes<<"/"<<anio<<endl;
}
Clase Discos
Discos.h :
#ifndef DISCOS_H
#define DISCOS_H
#include <cstring>
#include <iostream>
#include <stdlib.h>
#include "Fecha.h"
using namespace std;
class Discos
{
friend ostream & operator<<(ostream&,const Discos &);
public:
Discos();
Discos(string,string,int);
Discos(string,string,int,int,int,int,int,int);
~Discos();
string getnombredisco()const;
string getinterprete()const;
void setnombredisco(string);
void setinterprete(string);
static int getcantidaddiscos();
void setcantidadtemas(int);
void settema(string,int);
void operator+();
void operator-();
private:
string nombredisco;
string interprete;
Fecha lanzamiento;
int minduracion;
int segduracion;
static int cantidaddiscos;
string *temas;
int cantidadtemas;
bool dond;
};
#endif
Discos.cpp
#include "Discos.h"
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
using namespace std;
ostream & operator<<(ostream & salida, const Discos &cd)
{
salida<<"CD ="<<cd.getnombredisco()<<endl<<"Artista = "<<cd.getinterprete();
}
void Discos::operator+()
{
cout<<endl;
if(dond==false)
{
for(int j=0;j<cantidadtemas;j++)
{
cout<<"track 0"<<j+1<<":"<<temas[j]<<endl;
}
}
dond=true;
}
void Discos::operator-()
{
if(dond==true)
{
system("CLS");
cout<<nombredisco<<endl<<interprete;
}
dond=false;
}
int Discos::cantidaddiscos=0;
Discos::Discos()
{
nombredisco="xx";
interprete="yy";
cantidaddiscos++;
cantidadtemas=0;
minduracion=0;
segduracion=0;
temas=NULL;
dond=false;
}
Discos::Discos(string nomdisc,string interp,int ct)
{
nombredisco=nomdisc;
interprete=interp;
cantidaddiscos++;
cantidadtemas=ct;
minduracion=10;
segduracion=10;
temas=new string [ct];
for(int i=0;i<ct;i++)
{
temas[i]="track 01"; //seria bueno poner track i , no se como hacerlo
}
dond=false; //significa que no esta desplegada la lista de temas
}
Discos::Discos(string nomdisc,string interp,int ct,int md,int sd,int dl,int ml,int al):lanzamiento(dl,ml,al)
{
nombredisco=nomdisc;
interprete=interp;
cantidadtemas=ct;
cantidaddiscos++;
minduracion=md;
segduracion=sd;
temas=new string [cantidadtemas];
for(int i=0;i<cantidadtemas;i++)
{
temas[i]="track 01"; //seria bueno poner track i , no se como hacerlo
}
dond=false;
}
Discos::~Discos()
{
if(temas!=NULL)
{
delete []temas;
}
else
{
delete temas;
}
cantidaddiscos--;
}
string Discos::getinterprete()const
{
return interprete;
}
string Discos::getnombredisco()const
{
return nombredisco;
}
int Discos::getcantidaddiscos()
{
return cantidaddiscos;
}
void Discos::setcantidadtemas(int ct)
{
if(ct>0)
{
cantidadtemas=ct;
}
else
{
cantidadtemas=1;
}
}
void Discos::setinterprete(string interp)
{
interprete=interp;
}
void Discos::setnombredisco(string ndisc)
{
nombredisco=ndisc;
}
void Discos::settema(string nomtema, int numtema)
{
for(int i=0;i<cantidadtemas;i++)
{
if(i==numtema-1)
{
temas[i]=nomtema;
}
}
}
Clase coleccion
coleccion.h
#ifndef COLECCION_H
#define COLECCION_H
#include "Discos.h"
using namespace std;
class Coleccion
{
/*friend ostream & operator<<(ostream&,const Coleccion &);*/
public:
Coleccion();
Coleccion(string);
void modificarinterprete(string);
void modificarnombredisco(string);
//void modificarndei(string,string);
void imprimirtodoslosdiscos();
void agregardisco(Discos);
void eliminardisco(/*&*/Discos);
Discos operator[](int);
~Coleccion();
private:
Discos * cds;
int cantdiscos;
string nombrecoleccion;
void ordenarporfecha();
};
#endif
Coleccion.cpp :
#include "Coleccion.h"
/*ostream & operator<<(ostream & salida ,const Coleccion & c)
{
salida<<c.imprimirtodoslosdiscos();
}*/
void Coleccion::imprimirtodoslosdiscos()
{
int i=0;
if(cds==NULL)
{
cout<<"No hay discos cargados en la coleccion"<<endl;
}
else
{
for(int i=0;i<cantdiscos;i++)
{
cout<<endl;
cout<<cds[i];
}
}
}
Discos Coleccion::operator[](int i)
{
return cds[i];
}
Coleccion::Coleccion()
{
cds=NULL;
nombrecoleccion="Coleccion predeterminada";
cantdiscos=0;
}
Coleccion::Coleccion(string nc)
{
cds=NULL;
nombrecoleccion=nc;
cantdiscos=0;
}
Coleccion::~Coleccion()
{
delete [] cds;
}
void Coleccion::modificarinterprete(string nint)
{
if(cds!=NULL)
{
int i=0;
string nuevonombre="";
cout<<endl;
cout<<"Ingrese el nuevo nombre de interprete : "<<endl;
cin>>nuevonombre;
for(i=0;i<cantdiscos;i++)
{
if(cds[i].getinterprete()==nint)
{
cds[i].setinterprete(nuevonombre);
break;
}
}
}
}
void Coleccion::modificarnombredisco(string nnd)
{
int i=0;
string nuevonombre="";
cout<<endl;
cout<<"Ingrese el nuevo nombre de disco : "<<endl;
cin>>nuevonombre;
for(i=0;i<cantdiscos;i++)
{
if(cds[i].getnombredisco()==nnd)
{
cds[i].setnombredisco(nuevonombre);
break;
}
}
}
void Coleccion::agregardisco(/*&*/Discos d1)
{
if(cds==NULL)
{
cds=new Discos();
cantdiscos++;
return;
}
if(cantdiscos==1)
{
Discos * arraydiscos=new Discos[2];
arraydiscos[0]=cds[0];
delete cds;
cds=new Discos[2];
cds[0]=arraydiscos[0];
cds[1]=d1;
cantdiscos++;
}
Discos * arraydiscos=new Discos[cantdiscos+1];
arraydiscos=cds;
/*for(int i=0;i<cantdiscos;i++)
{
arraydiscos[i]=cds[i];
cout<<arraydiscos[i].getnombredisco()<<endl;
cout<<cds[i].getnombredisco()<<endl;
}*/
arraydiscos[cantdiscos]=d1;
delete [] cds;
cantdiscos++;
cds=NULL;
cds=new Discos[cantdiscos];
cds=arraydiscos;
/*for(int i=0;i<cantdiscos;i++)
{
cds[i]=arraydiscos[i];
}
*/
}
void Coleccion::eliminardisco(/*&*/Discos d1)
{
/* if(cds==NULL)
{
cout<<"No se cargaron cds"<<endl;
return;
}
if(cantdiscos==1)
{
delete []cds;
cds=NULL;
cantdiscos--;
}*/
//Discos * arraydiscos=new Discos[cantdiscos-1];
/* if(cds[cantdiscos-1].getnombredisco()==d1.getnombredisco())
{
for(int i=0;i<cantdiscos-2;i++)
{
arraydiscos[i]=cds[i];
}
cds=NULL;
cantdiscos--;
cds=arraydiscos;
}
else
{
for(int i=0;i<cantdiscos;i++)
{
if(cds[i].getnombredisco()==d1.getnombredisco())
{
for(int j=i;j<cantdiscos-1;j++)
{
cds[j]=cds[j+1];
break;
}
}
else
{
break;
return;
}
}
for(int k=0;k<cantdiscos-2;k++)
{
arraydiscos[k]=cds[k];
}
delete []cds;
cantdiscos--;
cds=arraydiscos;
}*/
}