Jump to content

Recommended Posts

Posted (edited)
class Aquario;
class Peixe{
string nome;
string cor;
int peso;
int barriga;
int numeroSerie;
static int conta;
public:
Peixe(string Nome, string Cor = "cinzento", int Peso = 10, int tamanoDeAlimentos = 50) : nome(Nome), cor(Cor), peso(Peso), barriga(tamanoDeAlimentos)
{
numeroSerie = ++conta;
cout << endl << numeroSerie << endl;
}
~Peixe(){
}
void alimentase(Aquario *aqu, int quantidade_alimento)
{
peso += quantidade_alimento;
if (peso > barriga)
{
aqu->removePeixe(this); /// continuo a ter o problema aqui <<<<<-----------------------
}
}
int ObtemNumeroSerie()
{
return numeroSerie;
}
string ObtemNome()
{
return nome;
}
};
int Peixe::conta;
class Aquario
{
string nome;
vector < Peixe* > Peixes;
public:
Aquario(string Nome) :nome(Nome){}
~Aquario(){
for (int i = 0; i < (int) Peixes.size(); i++)
delete Peixes[i];
}
void addPeixe(Peixe *a){
Peixes.push_back(a);
}
void alimentarPeixe(int quantidadeAlimento = 5)
{
for (int i = 0; i < (int) Peixes.size(); i++)
Peixes[i]->alimentase(this, quantidadeAlimento);
}
bool VerificaExistenciaPeixe(int numeroSerie)
{
for (int i = 0; i < (int) Peixes.size(); i++)
if (Peixes[i]->ObtemNumeroSerie() == numeroSerie)
return true;
return false;
}
bool removePeixe(Peixe *a)
{
for (int i = 0; i < (int) Peixes.size(); i++)
{
if (Peixes[i] == a)
{
delete Peixes[i];
Peixes.erase(Peixes.begin() + i);
return true;
}
}
return false;
}
string MonstraConteudoAquario()
{
ostringstream oss;
oss << "Peixes no Aquario:" << (int) Peixes.size() << endl;
for (int i = 0; i < (int) Peixes.size(); i++)
oss << "\t" << Peixes[i]->ObtemNome() << " " << Peixes[i]->ObtemNumeroSerie() << endl;
return oss.str();
}
};

Ainda não consegui resolver o meu problema..

Alguém pode dizer o que se passa?
Edited by apocsantos
Posted

qual a razão da não separação da definição da declaração das classes ?

porque não indentas o código ? (eu nunca irei ler um código apresentado dessa maneira)

apenas preguiça... é esse o problema?

Posted (edited)
class Aquario;

class Peixe{
string nome;
string cor;
int peso;
int barriga;
int numeroSerie;
static int conta;
public:

Peixe(string Nome, string Cor = "cinzento", int Peso = 10, int tamanoDeAlimentos = 50) : nome(Nome), cor(Cor), peso(Peso), barriga(tamanoDeAlimentos);
~Peixe(){}
void alimentase(Aquario *aqu, int quantidade_alimento);
int ObtemNumeroSerie(){return numeroSerie;}
string ObtemNome(){return nome;}
};
int Peixe::conta = 500;

void Peixe::alimentase(Aquario *aqu, int quantidade_alimento)
{
peso += quantidade_alimento;
if (peso > barriga)
{
	aqu->removePeixe(this); /// continuo a ter o problema aqui <<<<<----------------------
}
}

Peixe::Peixe(string Nome, string Cor = "cinzento", int Peso , int tamanoDeAlimentos ) : nome(Nome), cor(Cor), peso(Peso), barriga(tamanoDeAlimentos)
{
numeroSerie = ++conta;
cout << endl << numeroSerie << endl;
}

class Aquario
{
string nome;
vector < Peixe* > Peixes;
public:
Aquario(string Nome) :nome(Nome){}

~Aquario(){for (int i = 0; i < (int) Peixes.size(); i++)	delete Peixes[i];}

void addPeixe(Peixe *a){Peixes.push_back(a);}
void alimentarPeixe(int quantidadeAlimento = 5);
bool VerificaExistenciaPeixe(int numeroSerie);
bool removePeixe(Peixe *a);
string MonstraConteudoAquario();

};

bool Aquario::removePeixe(Peixe *a)
{
for (int i = 0; i < (int) Peixes.size(); i++)
{
	if (Peixes[i] == a)
	{
		delete Peixes[i];
		Peixes.erase(Peixes.begin() + i);
		return true;
	}
}
return false;
}

void Aquario::alimentarPeixe(int quantidadeAlimento )
{
for (int i = 0; i < (int) Peixes.size(); i++)
	Peixes[i]->alimentase(this, quantidadeAlimento);
}

bool Aquario::VerificaExistenciaPeixe(int numeroSerie)
{
for (int i = 0; i < (int) Peixes.size(); i++)
if (Peixes[i]->ObtemNumeroSerie() == numeroSerie)
	return true;
return false;
}

string Aquario::MonstraConteudoAquario()
{
ostringstream oss;

oss << "Peixes no Aquario:" << (int) Peixes.size() << endl;
for (int i = 0; i < (int) Peixes.size(); i++)
	oss << "\t" << Peixes[i]->ObtemNome() << " " << Peixes[i]->ObtemNumeroSerie() << endl;

return oss.str();
}
Edited by apocsantos
Posted
porque não
          indentas --------------------------------------------------------------------------- formatar o código de maneira que seja legível através de espaçamentos
                          o código ? --------------------------------------------------------- o teu código
                                     eu ------------------------------------------------------ pode ser que com sorte apareça outro
                                        nunca irei ler --------------------------------------- se ler código não indentado possa ser chamado de ler ... será mais decifrar
                                                       um código apresentado dessa maneira --- não indentado ...
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Posted

o teu problema é:

- estas dentro de um ciclo (a alimentar peixes) <------------

> se o peixe ficar gordo demais

> eliminar o peixe

> novo ciclo para remover o peixe <----------------

por outras palavras, mexer nos elementos do contentor durante um ciclo é sempre meio caminho andado para dar erro.

- primeiro alimenta os peixes (num ciclo fechado)

- depois vais ver se necessitas de remover o peixe (num ciclo à posteriori)

ps : ciclos com contentores da STL são feitos com iteradores.

IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.